You need to enable JavaScript to run this app. Python生成CSV文件表头下方出现意外空行,如何修复?
优惠活动
大模型
产品
解决方案
定价
更多

Python生成CSV文件表头下方出现意外空行,如何修复?

问题原因

  • csv.DictWriter的writeheader()方法会自动在表头末尾添加符合CSV规范的换行符,你后续追加数据时先写入了\n,相当于连续插入两个换行,就会在表头下方生成空白行
  • 手动拼接CSV字符串的方式容错率低,若字段内容本身包含逗号、引号等特殊字符,会直接导致CSV格式错乱
  • 追加模式打开文件时没有添加newline=''参数,Windows系统下也可能生成多余换行

修改后代码

import csv
import random

header_list = ["Firm", "hour", "unit sold", "product code", "dollar value"]
for i in range(3):
    # 单次打开文件完成表头写入+数据写入,避免多次打开的异常
    with open(f'D:\\2000 transactions\\location_id_{i}.csv', 'w', newline='') as file:
        dw = csv.DictWriter(file, delimiter=',', fieldnames=header_list)
        dw.writeheader()
        # 直接在同一个文件上下文里写数据,不用分开追加
        for j in range(5):
            n = random.randint(1, 99)
            # 用writerow方法自动处理格式,不用手动拼接
            dw.writerow({
                "Firm": sp100_list['Name'].loc[n],
                "hour": random.randint(5, 20),
                "unit sold": random.randint(200, 1000),
                "product code": random.randint(100, 150),
                "dollar value": int(random.random() * 1000000)
            })

如果确实需要保留分开创建文件和追加数据的逻辑,可将追加部分修改为:

# 向文件追加数据 ---------------
for j in range(5):
    n = random.randint(1, 99)
    row_data = [
        sp100_list['Name'].loc[n],
        random.randint(5, 20),
        random.randint(200, 1000),
        random.randint(100, 150),
        int(random.random() * 1000000)
    ]
    # 追加打开时加newline参数,用csv.writer处理换行
    with open(f'D:\\2000 transactions\\location_id_{i}.csv', 'a', newline='') as myfile:
        writer = csv.writer(myfile)
        writer.writerow(row_data)

内容的提问来源于stack exchange,提问作者Hary2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 23:45:06