我很困惑。 talk解释说,您应仅在代码中使用unicode字符串。当字符串离开代码时,应将其转换为字节。我是为一个csv文件这样做的:
import csv
with open('keywords.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter='\t', quotechar='\"')
for (p, keywords) in ml_data:
writer.writerow([p.encode("utf-8"), ', '.join(keywords).encode("utf-8")])
这会导致令人讨厌的效果,在每个字符串的前面都添加了b'
,这在python 2.7中并没有发生。如果在将字符串写入csv文件之前不对字符串进行编码,则b'
不存在,但是持久化时我不需要将它们转换为字节吗?如何在没有这种b'
烦恼的情况下将字节写入文件?
答案 0 :(得分:1)
停止尝试对单个字符串进行编码,而应为整个文件指定编码:
import csv
with open('keywords.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile, delimiter='\t', quotechar='\"')
for (p, keywords) in ml_data:
writer.writerow([p, ', '.join(keywords)])
您的代码出错的原因是,writerow
希望您给它提供字符串,但是您正在传递字节,因此它使用了字节中的repr()
,其中有额外的b'...'
周围。如果您传递字符串,但是在打开文件时使用encoding
参数,则字符串将为您正确编码。
请参见csv
documentation examples。其中之一显示了如何设置编码。