python-Python3:编写csv文件
我正在尝试在Windows计算机上使用Python 3.2编写一个简单的CSV文件,但是我没有运气。 从Python 3.2的csv模块文档中:
>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ',
... quotechar='|', quoting=csv.QUOTE_MINIMAL)
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
生成的文件的每一行都以字节序列3005735759606449159152结尾,因此当您使用例如MS Excel打开文件时,每行看起来都有一个多余的空行。 这不是“ CSV文件”。
请注意,如果我在Python 3.2中尝试使用相同的Python 2.7示例(文件模式的最大区别是'w'和3005735759606449159153),则在尝试spamWriter.writerow时会出现错误:
追溯(最近一次呼叫最近):TypeError中的文件“”,第1行:“ str”不支持缓冲区接口
如何在Windows计算机上从Python 3.2编写一个简单的CSV文件?
6个解决方案
63 votes
文档说您应该使用open('eggs.csv', 'w', newline='')
[HTTP://docs.Python.org/朋友3可/library/CSV.HTML#ID2]
alexanderlukanin13 answered 2020-08-10T21:05:45Z
19 votes
这将适用于Python 2和Python 3:
if sys.version_info >= (3,0,0):
f = open(filename, 'w', newline='')
else:
f = open(filename, 'wb')
Dave Burton answered 2020-08-10T21:06:04Z
7 votes
如脚注所示:
csv.writer(csvfile, dialect='excel', **fmtparams)
如果csvfile是文件对象,则应使用newline =''将其打开。
如果未指定newline ='',则嵌入引号中的换行符将无法正确解释,并且在使用\ r \ n linendings的平台上将添加额外的\ r。 指定newline =''应该永远是安全的,因为csv模块会执行自己的(通用)换行符处理。
以下变体适用于Linux和Windows:
spamWriter = csv.writer(open('eggs.csv', 'wb'), delimiter=' ', quotechar='|',
quoting=csv.QUOTE_MINIMAL, newline='')
spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
phihag answered 2020-08-10T21:06:38Z
2 votes
要直接回答您的问题,您应该可以使用lineterminator格式化参数:
...因此修改此行应该可以(未经测试):
>>> spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ',
... quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
至于为什么该示例无法立即使用,对我来说似乎有点像个错误。
Gerrat answered 2020-08-10T21:07:06Z
1 votes
我将其中一个代码从Python2.6.6移至python3.4.3时解决了此错误
Python2.6.6(我正在尝试对我的csvfile进行混淆)
with open( os.path.join(path, name) , 'r') as mycsvfile:
writer = csv.writer(open(newFilename, 'w'))
上面的代码在python2.6.6上运行良好,但是在python3.4.3上却无法正常工作,因为当我尝试运行python3文件时遇到了utf-8 unicode错误,因此我进行了以下更改Python3.4.4
import codecs
with codecs.open(os.path.join(path, name) , 'r', encoding='ISO-8859-1') as mycsvfile:
writer = csv.writer(open(newFilename, 'w'))
就是这样,我的代码现在可以正常工作,基本上python3并未考虑某些unicode,我们需要使用编解码器导入使其正常工作,希望对您有所帮助。
Prashanth answered 2020-08-10T21:07:40Z
1 votes
[对于Python 2.x]spamWriter的此实现为我工作...
with open('assignmentresults.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(["Hullo", "World"])
SashaZd answered 2020-08-10T21:08:00Z