【发布时间】:2016-12-12 23:50:56
【问题描述】:
在我的 Windows 机器上,我通常在 python 2 中这样做以编写一个 csv 文件:
import csv
f = open("out.csv","wb")
cr = csv.writer(f,delimiter=';')
cr.writerow(["a","b","c"])
f.close()
现在 python 3 禁止将文本文件编写为二进制文件,那段代码不再工作了。这行得通:
import csv
f = open("out.csv","w",newline='')
cr = csv.writer(f,delimiter=';')
cr.writerow(["a","b","c"])
f.close()
问题是:newline 参数对于 Python 2 是未知的。
当然,省略换行符会导致 csv 文件包含太多 \r 字符,因此不可接受。
我目前正在执行向后兼容的过程,以逐步从 python 2 迁移到 python 3.5 在我的所有模块中都有很多这样的语句。
我的解决方案是将代码嵌入到自定义模块中,并且自定义模块返回文件处理程序 + 写入器对象。 python 版本检查是在模块内部完成的,它允许任何使用我的模块的模块在没有太多黑客攻击的情况下工作任何 python 版本。
有没有更好的办法?
【问题讨论】:
-
我不禁想知道@Raymond Hettinger(Python 核心开发人员和 csv 模块的创建者)会提出什么建议……
标签: python python-3.x windows python-2.7 csv