我在Pyhton中有以下代码:
# myFile.csv tend to looks like:
# 'a1', 'ふじさん', 'c1'
# 'a2', 'ふじさん', 'c2'
# 'a3', 'ふじさん', 'c3'
s = u"unicodeText" # unicodeText like, ふじさん بعدة أش 일본富士山Ölkələr
with codecs.open('myFile.csv', 'w+', 'utf-8') as f: # codecs open
f.write(s.encode('utf-8', 'ignore'))
我不知道我的配置是否有问题,或者我的编码错误,如果您有任何想法,请提供建议。非常感谢!
将open
更改为codecs.open
感谢您指出f.close(),删除。
答案 0 :(得分:1)
codecs.open 打开一个包装的读写器,它将为您进行编码/解码。所以你不需要编写你的字符串进行编写。你需要通过'忽略'打开电话中的参数。
with open('myFile.csv', 'w+', 'utf-8', 'ignore') as f:
f.write(s)
请注意,在使用 with 语句时,无需调用 close 。
原始答案,刮擦:
open 的第三个参数是需要整数的缓冲。 您应该写下这样的编码:
with open('myFile.xls', 'w+', encoding='utf-8') as f:
请注意,您以文本模式打开文件。无需编写字符串进行编码。
您的文件模式' w +'有点奇怪。我不确定,但我认为它会截断你的文件。如果你想附加到文件,你应该使用' a'作为模式。
答案 1 :(得分:1)
您似乎尝试以文本模式打开文件(因为您指定了编码),但之后您尝试编写二进制数据(因为您在将文本写入之前对文本进行编码)文件)。您需要以二进制文件的形式打开文件并编写编码文本,或者将其作为文本打开并写入文本。
此外,您尝试将其作为文本打开甚至无法正常工作,因为您将utf-8
作为缓冲参数而不是encoding
参数传递。见the open() documentation`。
但是,即使你做了所有这些,这仍然无法真正帮助你使用Excel文件,因为那些具有复杂的二进制结构。我建议您使用类似xlrd的内容来阅读xls文件,并使用Xlswriter来编写它们。
这是一个适用于.csv的简单示例:
with open('file.csv', 'w', encoding='utf-8') as fh:
fh.write('This >µ< is a unicode GREEK LETTER MU\n')
或者
with open('file.csv', 'wb') as fh:
fh.write('This >µ< is a unicode GREEK LETTER MU\n'.encode('utf-8'))
答案 2 :(得分:1)
Excel(至少在Windows上)在.csv
文件的开头喜欢Unicode BOM,即使使用UTF-8也是如此。有一个编解码器,utf-8-sig
。
此外,只需要Python 3的正常open
,f.close()
中不需要with
:
#coding:utf8
data = '''\
a1,ふじさん,c1
a2,ふじさん,c2
a3,ふじさん,c3
'''
with open('myFile.csv', 'w', encoding='utf-8-sig') as f:
f.write(data)