Linux系统下Python3 csv.writerows()每行末尾多余\r回车符问题咨询
问题原因
Python 内置 csv 模块的写入器默认行终止符为符合 CSV 工业规范的 \r\n,该默认值与代码运行的操作系统无关。你在 Linux 环境下指定 newline='' 的作用是阻止操作系统对换行符做额外自动转换,并不会修改 csv 模块自身的行终止符输出逻辑,所以还是会输出 \r\n 换行。
解决方案
创建 csv.writer 实例时,手动指定 lineterminator 参数为 \n 即可,修改后的可运行代码如下:
#!/usr/bin/python3 import csv with open("position.csv", 'w', newline='') as file: # 新增lineterminator参数指定换行符为纯LF writer = csv.writer(file, quoting=csv.QUOTE_NONNUMERIC, lineterminator='\n') lat = 3.7 long = 4.5 writer.writerow(['coords', lat, long])
修改后执行代码,再用 od -cd 命令查看输出的csv文件,就能看到换行符已经改为你需要的 \n。
二进制模式报错的原因
csv.writer 是面向文本流设计的工具,输出内容为字符串类型,而用 wb 二进制模式打开的文件要求写入的数据必须是bytes类型,二者类型不匹配因此会触发报错。如果一定要用二进制模式写入,需要自行把csv生成的每行字符串编码为bytes后再写入,操作复杂度远高于直接修改lineterminator参数,不推荐。
内容的提问来源于stack exchange,提问作者vicarage
相关产品推荐
相关产品推荐

