实用脚本能批量写入吗?

wen 实用脚本 9

本文目录导读:

实用脚本能批量写入吗?

  1. 场景一:批量写入到文本文件/日志文件
  2. 场景二:批量写入到 CSV / Excel 文件
  3. 场景三:批量写入到数据库 (MySQL/PostgreSQL/SQLite)
  4. 场景四:批量写入到 Excel (.xlsx) 文件
  5. 场景五:Shell 脚本批量写入(Linux/Mac)
  6. 性能优化建议(批量写入的关键)

是的,实用脚本完全可以批量写入数据,这是脚本语言(如 Python、Shell、SQL、JavaScript 等)最擅长的功能之一。

批量写入通常指:一次性将大量结构化或非结构化数据写入到文件、数据库、API或其他存储系统中

具体如何实现,取决于你想要写入的目标是什么,下面我将分场景介绍最常用的几种方法,并提供可直接运行的实用脚本示例。


批量写入到文本文件/日志文件

这是最常见的场景,比如生成测试数据、日志记录等。

示例:生成 1000 条模拟用户登录日志

# Python 脚本 batch_write_logs.py
import datetime
import random
users = [f"user_{i}" for i in range(1, 101)]
actions = ["login", "logout", "view_page", "purchase"]
with open("access.log", "w", encoding="utf-8") as f:
    for i in range(1000):
        timestamp = datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0, 86400))
        user = random.choice(users)
        action = random.choice(actions)
        ip = f"192.168.1.{random.randint(1, 254)}"
        # 写入一行
        f.write(f"{timestamp.isoformat()} | {user} | {action} | {ip}\n")
print("✅ 已批量写入 1000 条日志到 access.log")

特点:使用 for 循环 + f.write(),逐行写入,内存占用低。


批量写入到 CSV / Excel 文件

适用于数据分析、报表导出等。

示例:批量生成 10000 条销售数据到 CSV

# Python 脚本 batch_write_csv.py
import csv
import random
headers = ["OrderID", "Product", "Price", "Quantity", "Total"]
products = ["Laptop", "Mouse", "Keyboard", "Monitor", "Headset"]
with open("sales_report.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(headers)  # 写入表头
    for i in range(1, 10001):
        product = random.choice(products)
        price = round(random.uniform(10, 1500), 2)
        qty = random.randint(1, 10)
        total = round(price * qty, 2)
        writer.writerow([i, product, price, qty, total])
print("✅ 已批量写入 10000 条销售数据到 sales_report.csv")

特点:使用 csv.writer,自动处理逗号转义和换行,性能优于普通字符串拼接。


批量写入到数据库 (MySQL/PostgreSQL/SQLite)

这是后端开发中最核心的需求。

示例:批量插入 5000 条用户数据到 SQLite

# Python 脚本 batch_write_db.py
import sqlite3
import random
import string
# 1. 连接数据库(自动创建文件)
conn = sqlite3.connect("test.db")
cursor = conn.cursor()
# 2. 创建表
cursor.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT UNIQUE,
        email TEXT,
        score INTEGER
    )
""")
# 3. 准备批量数据
users_data = []
for i in range(5000):
    username = f"user_{i}_{''.join(random.choices(string.ascii_lowercase, k=4))}"
    email = f"{username}@example.com"
    score = random.randint(0, 100)
    users_data.append((username, email, score))
# 4. 使用 executemany 批量写入(速度极快)
cursor.executemany(
    "INSERT OR IGNORE INTO users (username, email, score) VALUES (?, ?, ?)",
    users_data
)
conn.commit()
cursor.close()
conn.close()
print(f"✅ 已批量写入 {len(users_data)} 条用户数据到 test.db")

关键点

  • 使用 executemany 而不是逐条 execute,性能提升 10~100倍
  • 使用参数化查询( 占位符)防止 SQL 注入。

批量写入到 Excel (.xlsx) 文件

适合生成带格式的报表。

示例:使用 openpyxl 批量写入 10000 行数据

# Python 脚本 batch_write_excel.py
from openpyxl import Workbook
import random
wb = Workbook()
ws = wb.active= "销售数据"
ws.append(["日期", "产品", "销量", "金额"])  # 表头
for i in range(10000):
    date = f"2024-01-{random.randint(1, 31):02d}"
    product = random.choice(["A", "B", "C"])
    qty = random.randint(1, 100)
    amount = round(qty * random.uniform(10, 100), 2)
    ws.append([date, product, qty, amount])
wb.save("sales_report.xlsx")
print("✅ 已批量写入 10000 行到 sales_report.xlsx")

Shell 脚本批量写入(Linux/Mac)

适合运维场景,比如生成大量配置文件。

#!/bin/bash
# batch_write_config.sh
for i in {1..1000}; do
    echo "server_$i 192.168.1.$i:8080" >> servers.txt
done
echo "✅ 已批量写入 1000 行到 servers.txt"

性能优化建议(批量写入的关键)

方法 写入 10 万行耗时 内存占用 推荐场景
逐行 write() ~3 秒 超低 日志、实时流
writelines() ~2 秒 已有列表数据
csv.writer ~4 秒 结构化数据
executemany (SQL) ~0.3 秒 数据库
pandas.to_csv() ~0.5 秒 高(需加载全部数据) 数据分析

终极方案(百万级以上)

# 分块写入 + 事务提交
chunk_size = 5000
for i in range(0, total_records, chunk_size):
    chunk = data[i:i+chunk_size]
    cursor.executemany(sql, chunk)
    conn.commit()  # 每 5000 条提交一次,防止事务过大

实用脚本完全能批量写入,而且这是它们的核心价值所在,根据你的目标选择合适的方法:

  • 文本/日志 → 直接用 Python write() + 循环
  • CSV/Excelcsv 模块或 openpyxl
  • 数据库executemany + 批量提交
  • 超大规模 → 分块 + 事务控制

如果你有具体的写入目标(比如写到哪里?格式是什么?数据量多大?),可以提供细节,我直接给你一个完整可用的脚本。

抱歉,评论功能暂时关闭!