gpt4 book ai didi

Python行文件迭代和奇怪的字符

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

我有一个巨大的 gzip 文本文件,我需要逐行阅读它。我选择以下内容:

for i, line in enumerate(codecs.getreader('utf-8')(gzip.open('file.gz'))):
print i, line

在文件后期的某个时刻,python 输出与文件不同。这是因为 python 认为是换行符的奇怪特殊字符导致行被破坏。当我在“vim”中打开文件时,它们是正确的,但可疑字符的格式很奇怪。我可以做些什么来解决这个问题吗?

我尝试过其他编解码器,包括 utf-16、latin-1。我也试过没有编解码器。

我使用“od”查看了文件。果然,在不该出现的地方出现了\n字符。但是,“错误”的前面有一个奇怪的字符。我认为这里有一些编码,有些字符是 2 个字节,但如果没有正确查看,尾随字节是\n。

根据“od -h 文件”,违规字符是“1d1c”。

如果我替换:

gzip.open('file.gz')

与:

os.popen('zcat file.gz')

它工作正常(实际上,速度相当快)。但是,我想知道我哪里出错了。

最佳答案

在没有编解码器的情况下重试。以下重现了您在使用编解码器时遇到的问题,没有它就没有问题:

import gzip 
import os
import codecs

data = gzip.open("file.gz", "wb")
data.write('foo\x1d\x1cbar\nbaz')
data.close()

print list(codecs.getreader('utf-8')(gzip.open('file.gz')))
print list(os.popen('zcat file.gz'))
print list(gzip.open('file.gz'))

输出:

[u'foo\x1d', u'\x1c', u'bar\n', u'baz']
['foo\x1d\x1cbar\n', 'baz']
['foo\x1d\x1cbar\n', 'baz']

关于Python行文件迭代和奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2737894/

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