Python使用csv.writer保存列表为CSV时出现多余空行问题求助
问题根因
你使用csv.writer写入文件时出现多余空行是文件打开模式的参数配置问题:
- Windows平台下文件默认打开时
newline参数会自动将写入的\n转换为\r\n csv.writer的writerow()方法本身已经会在每行末尾添加符合规范的换行符\r\n
两者叠加后每行末尾变成\r\r\n,打开文件时就会显示为多出来的空行。
解决方法
打开写入文件时,显式指定newline=''参数即可,该写法跨平台通用,在Windows、Linux、macOS下都不会生成多余空行。示例修改如下:
import csv # 原有错误的打开方式 # with open('output.csv', 'w') as f: # 修正后的打开方式 with open('output.csv', 'w', newline='') as f: write = csv.writer(f) chunk = [] # 你的原有处理逻辑 for x in 你的数据源: chunk.append(int(x)) if len(chunk) == 30: write.writerow(chunk) chunk = [] # 补充:循环结束后写入剩余不足30个的元素(如果需要保留) if chunk: write.writerow(chunk)
代码优化建议
- 去掉单独的计数变量
z,直接通过len(chunk)判断是否写满30个元素,减少变量维护成本,避免计数逻辑出错 - 新增末尾剩余元素的写入逻辑,避免当前代码会丢弃最后不满30个的元素的问题
- 如果不需要兼容csv特殊格式(如元素不含逗号、引号等特殊字符),也可以直接用字符串拼接写入,写法更简单:
with open('output.txt', 'w') as f: chunk = [] for x in 你的数据源: chunk.append(str(int(x))) if len(chunk) == 30: f.write(','.join(chunk) + '\n') chunk = [] if chunk: f.write(','.join(chunk) + '\n')
内容的提问来源于stack exchange,提问作者beep boop
相关产品推荐
相关产品推荐

