【发布时间】:2019-05-26 18:39:45
【问题描述】:
我正在 python3 中读取一个大 (10Gb) bzipped 文件,它是 utf-8 编码的 JSON。不过,我只想要几行,它们以特定的字节集开头,所以为了省去将所有行解码为 unicode 的麻烦,我正在以 'rb' 模式读取文件,如下所示:
with bz2.open(filename, 'rb') as file:
for line in file:
if line.startswith(b'Hello'):
#decode line here, then do stuff
但我突然想到,如果其中一个 unicode 字符包含与换行符相同的字节怎么办?通过for line in file 我会冒被截断行的风险吗?或者二进制文件上的逐行迭代器仍然可以魔术吗?
【问题讨论】:
-
顺便说一句,除了我的回答:
codecs.iterdecode函数可能与您的用例相关,因为您似乎关心处理速度。我从未对它进行基准测试,但我想与line.decode('utf8')相比,它可能会节省一些开销。将现有代码包装在生成器函数中,并将其作为第一个参数传递给iterdecode()。
标签: python-3.x unicode newline filehandle