在Python中使用csv写入器不带引号
我正在尝试把下面的字符串列表写入一个文件,字符串之间用指定的分隔符分开。
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
。
编辑: 当我尝试使用转义字符时,它并没有产生任何双引号。但是在我的测试数据中,任何地方出现的空格,都会变成双引号。
4 个回答
2
对我来说,解决办法是用普通的写入方式,而不是用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)
这可能不是“正确”的方法,但它确实保留了我项目中的原始行,其中包含了很多字符串和引号。
4
你真的需要用到csv库吗?其实只要把字符串连接起来就可以了...
>>> res = [u'123', u'hello']
>>> print res
[u'123', u'hello']
>>> print " ".join(res)
123 hello
26
你可以通过设置 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
,你还需要一个转义字符。