9

我正在写这样的csv文件

for a in products:
    mylist =[]
    for h in headers['product']:
        mylist.append(a.get(h))
        writer.writerow(mylist)

我的几个字段是文本字段,可以包含任何字符, " ' \n或其他任何字符。将其写入 csv 文件的最安全方法是什么。文件也将有整数和浮点数

4

2 回答 2

10

您应该使用QUOTE_ALL引用选项:

import StringIO
import csv

row = ["AAA \n BBB ,222 \n CCC;DDD \" EEE ' FFF 111"]

output = StringIO.StringIO()
wr = csv.writer(output, quoting=csv.QUOTE_ALL)
wr.writerow( row )

# Test:
contents = output.getvalue()
parsedRow = list(csv.reader([contents]))[0]

if parsedRow == row: print "BINGO!"
于 2013-04-26T03:28:44.747 回答
3

使用 csv.QUOTE_ALL 将确保您的所有条目都像这样引用: "value1","value2","value3"而使用 csv.QUOTE_NONE 会给您:value1,value2,value3

此外,这会将条目中的所有引号更改为双引号,如下所示。"somedata"user"somemoredata将成为 "somedata""user""somemoredata您书面的 .csv

但是,如果您将 quotechar 设置为反斜杠字符(例如),您的输入将返回为 \" 用于所有引号。

  create=csv.writer(open("test.csv","wb"),quoting=csv.QUOTE_NONEescapechar='\\', quotechar='"')
for element in file:
    create.writerow(element)

并且前面的示例将变为somedata\"user\"somemoredata干净的。它还将以相同的方式转义元素中的任何逗号。

于 2016-08-10T17:07:14.693 回答