使用python csv writer而不引用

时间:2014-05-27 05:58:49

标签: python csv quotes double-quotes

我正在尝试将下面的字符串列表写入由给定分隔符分隔的文件。

res = [u'123', u'hello world']

当我尝试按照下面的TAB分割时,它会给我正确格式化的字符串。

writer = csv.writer(sys.stdout, delimiter="\t")
writer.writerow(res)

gives --> 123   hello world

但是当我尝试使用delimiter=" "按空格分割时,它会给我空间但是带有如下引号。

123 "hello world"

如何删除引号。因此,当我使用空格作为分隔符时,我应该得到 123 hello world

EIDT :当我尝试使用escapechar时,它不会发出任何双引号。但是在我的测试数据中的每个地方都显示出一个空格,它会使它变倍。

4 个答案:

答案 0 :(得分:9)

您可以将csv.writer设置为仅引用quoting=csv.QUOTE_NONE,例如:

import csv
with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            escapechar=' ', quoting=csv.QUOTE_NONE)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

产地:

Spam Spam Spam Spam Spam Baked  Beans
Spam Lovely  Spam Wonderful  Spam

如果您执行QUOTING_NONE,您还需要并转义字符。

答案 1 :(得分:8)

引用行为由提供给编写器的各种quoting参数控制(或者如果您喜欢以这种方式执行,则设置在Dialect对象上)。默认设置为QUOTE_MINIMAL,除非值包含分隔符,引号字符或行终止符,否则不会产生您描述的行为。仔细检查您的测试数据 - [u'123', u'hello']不会产生您描述的内容,但会[u'123', u' hello']

如果您确定这是您想要的行为,则可以指定QUOTE_NONE,在这种情况下,如果您设置了escape character,它会尝试转义分隔符字符的实例,或者例如,如果你不这样做。

答案 2 :(得分:4)

你需要csv lib吗?加入字符串......

>>> res = [u'123', u'hello'] 
>>> print res
[u'123', u'hello']
>>> print " ".join(res)
123 hello

答案 3 :(得分:1)

对我有用的是使用常规编写器,而不是csv.writer,仅在列之间使用分隔符(在我的情况下为'\ t'):

with open(target_path, 'w', encoding='utf-8') as fd:
     # some code iterating over a pandas daftaframe called mydf     
     # create a string out of column 0, '\t' (tab delimiter) and column 1:
     output = mydf.loc[i][0] + '\t' + mydf.loc[i][1] +'\n'
     # write that output string (line) to the file in every iteration
     fd.write(output)

这可能不是“正确”的方法,但它肯定将原始行保留在我的项目中,其中包括许多字符串和引号。