如何在Python中对段落进行编码以用于CSV文件

1 投票
3 回答
2182 浏览
提问于 2025-04-17 05:01

我刚开始学习Python,遇到了一些困难,想做一个简单的事情。

我正在从一个网络服务获取一堆信息,解析这些结果,然后想把它们写入一个简单的文件里。大部分内容都是单行的,但从网络服务返回的有一段文字。这段文字会包含换行符、引号和一些随机字符。

我本来打算使用Python的CSV模块,但不太确定该用哪些参数,以及如何处理我的字符串,以确保这段文字能放在一行里,并且所有字符都能正确处理(特别是分隔符)。

3 个回答

0

为了让你更好地理解,下面是一个可执行的伪代码,展示了在实际标准的CSV输出中,如何处理引号等问题:

>>> def csv_output_record(input_row):
...     delimiter = ','
...     q = '"' # quotechar
...     quotables = set([delimiter, '\r', '\n'])
...     return delimiter.join(
...         q + value.replace(q, q + q) + q if q in value
...         else q + value + q if any(c in quotables for c in value)
...         else value
...         for value in input_row
...         ) + '\r\n'
...
>>> csv_output_record(['foo', 'x,y,z', 'Jack "Ripper" Jones', 'top\nmid\nbot'])
'foo,"x,y,z","Jack ""Ripper"" Jones","top\nmid\nbot"\r\n'

请注意,这里没有转义,只有引号。如果字段中出现了引号字符,那么这个引号必须写成两个。

0

你不需要做什么特别的事情。CSV模块会自动帮你处理引号的问题。

>>> from StringIO import StringIO
>>> s = StringIO()
>>> w = csv.writer(s)
>>> w.writerow(['the\nquick\t\r\nbrown,fox\\', 32])
>>> s.getvalue()
'"the\nquick\t\r\nbrown,fox\\",32\r\n'
>>> s.seek(0)
>>> r = csv.reader(s)
>>> next(r)
['the\nquick\t\r\nbrown,fox\\', '32']
1

默认情况下,csv.writer的设置应该能够正确处理这个问题。下面是一个简单的例子:

import csv

myparagraph = """
this is a long paragraph, with "quotes" and stuff.
"""

mycsv = csv.writer(open('foo.csv', 'wb'))
mycsv.writerow([myparagraph, 'word1'])
mycsv.writerow(['word2', 'word3'])

这个例子会生成一个这样的csv文件:

"
this is a long paragraph, with ""quotes"" and stuff.
",word1
word2,word3

这个文件在你喜欢的csv打开工具中加载时应该没有问题,它有两行和两列。

撰写回答