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
相关产品推荐
相关产品推荐

