gpt4 book ai didi

python - 如何在 Python 2.7 中一次解码一行 unicode?

转载 作者:太空狗 更新时间:2023-10-30 00:30:18 29 4
gpt4 key购买 nike

从 Python 2.7 加载 unicode 文本的正确方法是这样的:

content = open('filename').read().decode('encoding'):
for line in content.splitlines():
process(line)

(更新:不,不是。查看答案。)

但是,如果文件非常大,我可能希望一次一行地读取、解码和处理它,这样整个文件就不会一次加载到内存中。像这样的东西:

for line in open('filename'):
process(line.decode('encoding'))

for 循环在打开的文件句柄上的迭代是一个一次读取一行的生成器。

但这不起作用,因为如果文件是 utf32 编码的,例如,文件中的字节(十六进制)看起来像:

hello\n = 68000000(h) 65000000(e) 6c000000(l) 6c000000(l) 6f000000(o) 0a000000(\n)

for 循环完成的拆分为 \n 字符的 0a 字节,导致(十六进制) ):

lines[0] = 0x 68000000 65000000 6c000000 6c000000 6f000000 0a
lines[1] = 0x 000000

所以 \n 字符的一部分留在第 1 行的末尾,其余三个字节在第 2 行结束(后面是第 2 行中实际的任何文本。)调用 decode 可以理解地导致 UnicodeDecodeError

UnicodeDecodeError: 'utf32' codec can't decode byte 0x0a in position 24: truncated data

所以,很明显,在 0a 字节上拆分 unicode 字节流并不是将其拆分为行的正确方法。相反,我应该拆分完整的四字节换行符 (0x0a000000)。但是,我认为检测这些字符的正确方法是将字节流解码为 un​​icode 字符串并查找 \n 字符 - 而对完整流的这种解码正是我正在尝试的操作避免。

这不是一个不常见的要求。正确的处理方式是什么?

最佳答案

试一试怎么样:

for line in codecs.open("filename", "rt", "utf32"):
print line

我认为这应该可行。

codecs 模块应该为您进行翻译。

关于python - 如何在 Python 2.7 中一次解码一行 unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11866566/

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