我正在尝试将下面的字符串列表写入由给定分隔符分隔的文件。
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时,它不会发出任何双引号。但是在我的测试数据中的每个地方都显示出一个空格,它会使它变倍。
答案 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)
这可能不是“正确”的方法,但它肯定将原始行保留在我的项目中,其中包括许多字符串和引号。