【发布时间】:2016-10-04 20:44:26
【问题描述】:
我在file1.py 中打开一个非常大的二进制文件,我在 Python 3.5 中打开:
with open(pathname, 'rb') as file:
for i, line in enumerate(file):
# parsing here
但是,我自然会得到一个错误,因为我正在以二进制模式读取文件,然后创建一个字节列表。然后使用 for 循环,您将字符串与字节进行比较,此处代码失败。
如果我是在单独的行中阅读,我会这样做:
with open(fname, 'rb') as f:
lines = [x.decode('utf8').strip() for x in f.readlines()]
但是,我使用的是for index, lines in enumerate(file):。在这种情况下正确的方法是什么?我要解码下一个对象吗?
这是我正在运行的实际代码:
with open(bam_path, 'rb') as file:
for i, line in enumerate(file):
line_data=pd.DataFrame({k.strip():v.strip()
for k,_,v in (e.partition(':')
for e in line.split('\t'))}, index=[i])
这是错误:
Traceback (most recent call last):
File "file1.py", line 18, in <module>
for e in line.split('\t'))}, index=[i])
TypeError: a bytes-like object is required, not 'str'
【问题讨论】:
-
为什么你希望二进制文件有行?
-
@matthias 这是一种以二进制压缩的制表符分隔的文本格式。上面的怎么打开?这是一个巨大的文件,500 GB 左右。
标签: python python-3.x binary decode enumerate