![](/img/trans.png)
[英]How to properly open and encode CSV file in Python to be processed in Odoo framework
[英]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.