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

时间:2010-08-13 10:07:37

标签: python csv

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

输入

'1,2,3,Hello'

CSV格式的输出应为

'1,2,3','Hello'

3 个答案:

答案 0 :(得分:13)

使用正确的CSV writers

>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'wb'))
>>> spamWriter.writerow(['Spam', 'Lovely, Spam'])

输出:

  

垃圾邮件,“可爱,垃圾邮件”

答案 1 :(得分:5)

这不是特定于Python的,而是与CSV "standard"

有关

如果您想将控制字符作为值的一部分进行编写,则需要通过用双引号将其包围来转义值:

f.write('1,2,3,45,"The Next comma I want to write and not seperate to anoterh cell , so this sentence will bw hole",6,7,8')

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

答案 2 :(得分:1)

  

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

     

使用逗号分隔字段的基本思路很明确,但是当字段数据也可能包含逗号或嵌入的换行符时,这个想法会变得复杂。

     

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"'

但是当文本中有"\n等特殊符号时,您会遇到问题。

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

写入文件

可以使用@Dominic Rodger回答。

>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'wb'))
>>> spamWriter.writerow(['Spam', 'Lovely, Spam'])

写入字符串

来自https://stackoverflow.com/a/9157370/5238892

在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'

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'
相关问题