csv.writerow寫入多出空白一行問題解決

最近在做资料处理时发现,使用csv模组的writerow做多笔写入时,每笔之间会莫名其妙空一行。这样的状况在记事本看不出来,用excel就会发现了。根据网路查询得知,windows系统下会帮每一行结尾多加一个看不见的”进位符号”,然而这个动作writerow本身就会帮我们做,所以等于重複按Enter两次。避免这种状况一般常见的解决方法是以binary的方式开启档案:


f = open("xxx.csv","wb")
c = csv.writer(f)
1
2
然而这种方法在Python 3 下会产生错误:


ValueError: binary mode doesn’t take a newline argument

用python3 写入csv 总是多一个空行,查阅python3文档,发现有一个参数可以设置。就是newline 配置成空即可


f = open('xxx.csv', 'w', newline='')
1
后面加个newline='' 的参数就好了。不过这招在Windows系统下有用,不知道到了Linux下会不会变成完全不会进位了? 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据你提供的代码,每次执行`writer.writerow(list)`时,CSV文件中写入一行数据。而每次打开CSV文件时,使用的是"a+"模式,表示追加模式,并且光标定位在文件末尾。因此,在每次写入数据后,文件指针停留在当前行的末尾,下一次写入数据时从下一行开始。 如果你想要避免出现空白行,可以考虑以下两种方法: 1. 使用"w"模式打开文件:这样每次打开文件时清空原有内容,并从头开始写入数据,不出现交替的空白行。 ```python with open("D:\deskwin10\data.csv", "w") as csvfile: writer = csv.writer(csvfile) writer.writerow(list) ``` 2. 在每次写入数据前检查文件是否为空:可以使用`os.path.getsize()`方法来判断文件大小,如果文件为空,则先写入列名,再写入数据。 ```python import os file_path = "D:\deskwin10\data.csv" if os.path.getsize(file_path) == 0: with open(file_path, "a+") as csvfile: writer = csv.writer(csvfile) writer.writerow(column_names) with open(file_path, "a+") as csvfile: writer = csv.writer(csvfile) writer.writerow(data_row) ``` 这样做的目的是确保第一次写入时先写入列名,然后再写入数据,避免出现空白行。 注意:在使用`"a+"`模式打开文件时,可能出现一些操作系统相关的问题。如果以上方法无法解决问题,可以尝试使用其他模式,如`"w+"`或者在写入数据前使用`csvfile.seek(0)`将文件指针移动到文件开头。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值