gpt4 book ai didi

python - 如何在 Python 中使用 utf-8 创建文件?

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:39 25 4
gpt4 key购买 nike

我使用 open('test.txt', 'w') 创建一个新文件,它的字符集是二进制

>>> open('test.txt', 'w')
<open file 'test.txt', mode 'w' at 0x7f6b973704b0>

$ file -i test.txt.txt
test2.txt: inode/x-empty; charset=binary

使用模块 codecs 分配具有指定字符集的文件(比如 utf-8)。但是,字符集仍然是二进制

>>> codecs.open("test.txt", 'w', encoding='utf-8')
<open file 'test.txt', mode 'wb' at 0x7f6b97370540>

$ file -i test.txt
test.txt: inode/x-empty; charset=binary

我向 test.txt 写入了一些内容,字符集是 us-ascii

>>> fp. write ("wwwwwwwwwww")
>>> fp.close()

$ file -i test.txt
test.txt: text/plain; charset=us-ascii

好的,现在,我写一些特殊字符(比如Arènes)。然而,

>>> fp = codecs.open("test.txt", 'w', encoding='utf-8')
>>> fp.write("Arènes")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/codecs.py", line 688, in write
return self.writer.write(data)
File "/usr/lib/python2.7/codecs.py", line 351, in write
data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)

更具体地说,我想将查询结果(使用python-mysqldb)保存到一个文件中。关键源码如下:

cur.execute("SELECT * FROM agency")

# Write to a file
with open('test.txt', 'w') as fp :
for row in cur.fetchall() :
s = '\t'.join(str(item) for item in row)
fp.write(s + '\n')

现在,test.txt 的字符集是iso-8859-1(一些法语字符,例如Arènes)。

因此,我使用 codecs.open('test.txt', 'w', encoding='utf-8') 创建一个文件。但是,遇到如下错误:

Traceback (most recent call last):
File "./overlap_intervals.py", line 26, in <module>
fp.write(s + '\n')
File "/usr/lib/python2.7/codecs.py", line 688, in write
return self.writer.write(data)
File "/usr/lib/python2.7/codecs.py", line 351, in write
data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 21: ordinal not in range(128)

如何在 Python 中创建带有 utf-8 的文件?

最佳答案

空文件总是二进制的。

$ touch /tmp/foo
$ file -i /tmp/foo
/tmp/foo: inode/x-empty; charset=binary

往里面放点东西就没事了。

$ cat > /tmp/foo 
Rübe
Möhre
Mähne
$ file -i /tmp/foo
/tmp/foo: text/plain; charset=utf-8

Python 将执行与 cat 相同的操作。

with open("/tmp/foo", "w") as f:
f.write("Rübe\n")

检查一下:

$ cat /tmp/foo
Rübe
$ file -i /tmp/foo
/tmp/foo: text/plain; charset=utf-8

编辑:

使用 Python 2.7,您必须对 Unicode 字符串进行编码。

with open("/tmp/foo", "w") as f:
f.write(u"Rübe\n".encode("UTF-8"))

关于python - 如何在 Python 中使用 utf-8 创建文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30912297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com