python导出csv不带引号_使用csv read在文本文件中保留双引号

假设您从CSV中读取一行:from StringIO import StringIO

import csv

infile = StringIO('hello,"foo, bar"')

reader = csv.reader(infile)

row = reader.next() # row is ['hello', 'foo, bar']

行中的第二个值是foo, bar,而不是"foo, bar"。这不是Python的古怪之处,它是CSV语法的合理解释。引号可能不是用来作为值的一部分的,而是为了表明foo, bar是一个值,不应该基于逗号(,)拆分为foo和{}。另一种解决方案是在创建CSV文件时转义逗号,因此该行如下所示:

^{pr2}$

所以想要保留这些引语是很奇怪的要求。如果我们对你的用例和大局有了更多的了解,我们就能更好地帮助你。你想达到什么目的?输入文件来自何处?它真的是CSV还是其他类似的语法?例如,如果您知道每一行都由逗号分隔的两个值组成,而第一个值从不包含逗号,则可以在第一个逗号上拆分:print 'hello,"foo, bar"'.split(',', 1) # => ['hello', '"foo, bar"']

但我怀疑输入是否有这样的限制,这就是为什么需要像引号这样的东西来解决歧义。在

如果您再次尝试写入CSV,则在您执行此操作时将重新创建引号。它们不必出现在中间列表中:outfile = StringIO()

writer = csv.writer(outfile)

writer.writerow(row)

print outfile.getvalue()

这会打印出来hello,"foo, bar"

您可以通过设置一个新的方言来定制确切的CSV输出。在

如果您想获取行中的各个值并对其应用适当的引用规则,这是可能的,但这有点麻烦:# We're going to write individual strings, so we don't want a line terminator

csv.register_dialect('no_line_terminator', lineterminator='')

def maybe_quote_string(s):

out = StringIO()

# writerow iterates over its argument, so don't give it a plain string

# or it'll break it up into characters

csv.writer(out, 'no_line_terminator').writerow([s])

return out.getvalue()

print maybe_quote_string('foo, bar')

print map(maybe_quote_string, row)

输出为:"foo, bar"

['hello', '"foo, bar"']

这是我最接近的回答你的问题了。它并不是真正地保留双引号,而是将它们删除,然后用与它们放在第一位的规则相同的方式重新添加它们。在

我再说一遍,你可能在这个问题上走错了路。其他人可能会同意。这就是为什么你要努力得到好的答案。你想解决的最大问题是什么?我们可以帮助您更好地实现这一目标。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值