删除CSV输出中的'b'标志
我试图在Python 3.4中将输出写入CSV文件,但CSV文件始终包含'b'标志。例如,b'The text output1',b'The text output2',...我想知道是否有办法摆脱'b'标志。我明白这不是Python 2.X中的问题。删除CSV输出中的'b'标志
下面是我用
with open('test.csv', 'w') as f:
writer = csv.DictWriter(f, ['field'], extrasaction='ignore')
writer.writeheader()
test_text = mongo.test.find({'text': text})
for t in test_text
writer.writerow({i:v.encode('utf') for i,v in t.items()})
非常感谢代码
------更新-----------
非常感谢Tim Pietzcker,John Zwinck和Warren Weckesser提供了有用的评论和答案。每沃伦的建议,如果我改变我的代码,以
import csv
data = [chr(0x03d5) + 'oo', 'b' + chr(0x0101) + 'r']
with open('test.csv', 'w') as f:
writer = csv.writer(f)
for item in data:
writer.writerow([item])
如果我改变我的代码,以
import csv
data = [chr(0x03d5) + 'oo', 'b' + chr(0x0101) + 'r']
with open('test.csv', 'w') as f:
writer = csv.writer(f)
for item in data:
writer.writerow([item.encode('utf')])
我会用“B”输出我会得到错误信息
UnicodeEncodeError: 'charmap' codec can't encode character '\u03d5' in position 0: character maps to <undefined>
标记
b'\xcf\x95oo'
b'b\xc4\x81r'
任何thoug hts如何发生这种情况,以及我可以如何解决它?再次感谢。
------更新2 -----------
非常感谢沃伦的解决方案。以下代码工作!
import csv
data = [chr(0x03d5) + 'oo', 'b' + chr(0x0101) + 'r']
with open('test.csv', 'w', encoding='utf8') as f:
writer = csv.writer(f)
for item in data:
writer.writerow([item])
不要自己显式编码字符串;让作家照顾它。例如,这样的代码:
import csv
data = [chr(0x03d5) + 'oo', 'b' + chr(0x0101) + 'r']
with open('test.csv', 'w') as f:
writer = csv.writer(f)
for item in data:
writer.writerow([item])
写入文件
ϕoo
bār
用UTF-8编码(至少它在我的系统,其中locale.getpreferredencoding(False)
返回'UTF-8'
)。为了使编码明确的,你可以在调用中编码设置为open
:
with open('test.csv', 'w', encoding='utf8') as f:
如果最后一行更改为writer.writerow([item.encode('utf')])
(其转化的字符串bytes
),它产生
b'\xcf\x95oo'
b'b\xc4\x81r'
在你的榜样,尝试改变这一行:
writer.writerow({i:v.encode('utf') for i,v in t.items()})
这样:
writer.writerow(t)
那么如果这样的作品,你可以更换此:
for t in test_text
writer.writerow({i:v.encode('utf') for i,v in t.items()})
与
writer.writerows(test_text)
谢谢你的回答。我已根据您的答案更新了我的帖子和代码,但问题似乎仍然存在。 – frostman 2014-10-07 16:22:35
这个代码在语法上不合法,将不能运行。 – 2014-10-07 05:11:55
如果您将代码缩减为独立运行并显示问题的代码,将会有所帮助。你发布的代码有一些额外的东西,从真正的问题分心。 – 2014-10-07 05:12:24
感谢您的意见。根据沃伦的评论,我已经更新了我的帖子和代码,但问题似乎仍然存在。 – frostman 2014-10-07 16:22:02