使用python将带有逗号的文本写入CSV文件中的单元格

ari*_*iel 10 python csv

我想用逗号将文本写入CSV文件中的单元格.

输入

'1,2,3,Hello'

CSV输出应该是

'1,2,3','Hello'

Dom*_*ger 17

使用正确的CSV编写器:

>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'wb'))
>>> spamWriter.writerow(['Spam', 'Lovely, Spam'])
Run Code Online (Sandbox Code Playgroud)

输出:

垃圾邮件,"可爱,垃圾邮件"


Sim*_*Jie 6

文件的每一行都是一条数据记录。每条记录由一个或多个字段组成,以逗号分隔。

用逗号分隔字段的基本思想很清楚,但当字段数据也可能包含逗号甚至嵌入的换行符时,这个思想就会变得复杂。

CSV 实现可能无法处理此类字段数据,或者可能使用引号将字段引起来。-- 来自https://en.wikipedia.org/wiki/Comma-separated_values

因此,您可以使用引号将每个字段文本括起来。

假设输入是['1,2,3', 'Hello'],CSV 的输出应该是"1,2,3", "Hello",您可以使用下面的代码来实现这一点。

>>> ",".join('"{0}"'.format(s) for s in ['1,2,3', 'Hello'])
'"1,2,3","Hello"'
Run Code Online (Sandbox Code Playgroud)

但当文本中存在一些特殊符号如"\n等时就会遇到问题。

python csv 库已经为您处理了所有边缘情况。

写入文件

可以使用@Dominic Rodger 的答案。

>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'wb'))
>>> spamWriter.writerow(['Spam', 'Lovely, Spam'])
Run Code Online (Sandbox Code Playgroud)

写入字符串

来自/sf/answers/641015931/

在Python 3中:

>>> import io
>>> import csv
>>> output = io.StringIO()
>>> csvdata = [1,2,'a','He said "what do you mean?"',"Whoa!\nNewlines!"]
>>> writer = csv.writer(output, quoting=csv.QUOTE_NONNUMERIC)
>>> writer.writerow(csvdata)
59
>>> output.getvalue()
'1,2,"a","He said ""what do you mean?""","Whoa!\nNewlines!"\r\n'
Run Code Online (Sandbox Code Playgroud)

对于 Python 2,一些细节需要稍微更改一下:

>>> output = io.BytesIO()
>>> writer = csv.writer(output)
>>> writer.writerow(csvdata)
57L
>>> output.getvalue()
'1,2,a,"He said ""what do you mean?""","Whoa!\nNewlines!"\r\n'
Run Code Online (Sandbox Code Playgroud)


And*_*yle 5

这不是Python特有的,而是与CSV"标准"有关.

如果要将控制字符写为值的一部分,则需要通过用双引号括起来来转义值:

f.write('1,2,3,45,"The Next comma I want to write and not separate to another cell, so this sentence will be whole",6,7,8')
Run Code Online (Sandbox Code Playgroud)

编辑:虽然在实践中,按照其他人的建议使用CSV编写器界面会更好.当有一个现成的库为你抽象出来时,将自己包含在实现细节中并不是一个好主意.