繁体   English   中英

如何编码段落以在python的CSV文件中使用

[英]how to encode a paragraph for use in a CSV file in python

我是python的新手,正在努力使简单的事情生效。

我正在从Web服务中读取大量信息,并对结果进行解析,然后将其写到平面文件中。 我的大部分项目都是单行项目,但是从Web服务中获得的好处之一就是一个段落。 该段将包含换行符,引号和任何随机字符。

我打算将CSV模块用于python,但是不确定应使用的参数以及如何对字符串进行转义,以便将该段落放在一行中,因此可以保证所有字符均已正确转义(尤其是定界符)

默认的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打开工具中,因为它具有两行两列。

您不必做任何特别的事情。 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']

为了帮助您设置期望,以下是可执行的伪代码,用于说明事实上的标准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'

请注意,没有转义,只有引号,因此,如果quotechar出现在字段中,则必须将其加倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM