在我的Windows框中,我通常在python 2中执行此操作来编写csv文件:
import csv
f = open("out.csv","wb")
cr = csv.writer(f,delimiter=';')
cr.writerow(["a","b","c"])
f.close()
Run Code Online (Sandbox Code Playgroud)
既然python 3禁止将文本文件写为二进制文件,那么这段代码就不再起作用了.这样可行:
import csv
f = open("out.csv","w",newline='')
cr = csv.writer(f,delimiter=';')
cr.writerow(["a","b","c"])
f.close()
Run Code Online (Sandbox Code Playgroud)
问题是:newlinePython 2不知道参数.
当然,省略换行会导致csv文件中包含太多\r字符,因此无法接受.
我目前正在执行向后兼容的过程,逐步从python 2迁移到python 3.5我的所有模块中都有很多这些语句.
我的解决方案是将代码嵌入到自定义模块中,自定义模块返回文件处理程序+编写器对象.在模块内部进行python版本检查,允许使用我的模块的任何模块在没有太多黑客攻击的情况下使用任何python版本.
有没有更好的办法?