【发布时间】:2016-01-08 23:01:34
【问题描述】:
我想读取一个包含数据的文件,以十六进制格式编码:
01ff0aa121221aff110120...etc
文件包含 >100.000 个这样的字节,有些超过 1.000.000(它们来自 DNA 测序)
我尝试了以下代码(和其他类似代码):
filele=1234563
f=open('data.geno','r')
c=[]
for i in range(filele):
a=f.read(1)
b=a.encode("hex")
c.append(b)
f.close()
这给每个字节单独的“aa”“01”“f1”等,这对我来说是完美的!
直到(在这种情况下)字节 905 恰好是“1a”为止,这都可以正常工作。我还尝试了同样在同一字节处停止的 ord() 函数。
可能有一个简单的解决方案?
【问题讨论】:
-
当你说它停止时,你是否得到了异常,还是什么?另外要明确的是,这是一个二进制文件,您希望将其作为十六进制编码的字节值序列读取?
-
如果您正在读取二进制文件,最好使用
'rb'作为open的标志。 -
假设您准确地呈现代码,我想不出任何失败的原因。每个离散字节值(以及与此相关的空字符串)都编码为十六进制对我来说很好(在 Py2 中,
hex编解码器已从 Py3 中的str.encode中删除)。自己尝试每个可能的字符:for c in map(chr, range(256)): print c.encode('hex')。他们都工作。我的答案优化了在 C 层完成大部分工作(以换取稍微更高的峰值内存使用率),但是您给出的代码不能以任何有意义的方式中断。请给出确切的例外或不当行为。
标签: python python-2.7