【问题标题】:Error accessing binary data from a python list从 python 列表访问二进制数据时出错
【发布时间】:2012-08-04 21:44:16
【问题描述】:

我对 python 很陌生,使用 python 2.7。我必须读入一个二进制文件,然后将一些字节连接在一起。所以我尝试了

f = open("filename", "rb")
j=0
infile = []
try:
    byte = f.read(1)
    while byte != "":
        infile.append(byte) 
        byte = f.read(1)
finally:
    f.close()
blerg = (bin(infile[8])<<8 | bin(infile[9]))
print type

我意识到重铸为二进制可能是不必要的,但这是我后来的尝试之一。

我得到的错误是 TypeError: 'str' object cannot be mapped as index. 这对我来说是个新闻,因为我没有在任何地方使用字符串。 !@#% 我做错了什么?

编辑:完整追溯 文件 binaryExtractor.py,第 25 行,在 blerg = (bin(infile[8])

【问题讨论】:

  • 请发布完整的回溯。此外,代码中的缩进是关闭的。而type是一个内置函数(或内置类型),所以最好不要用它作为变量名。
  • “因为我没有在任何地方使用字符串”:bin 会返回一个字符串。
  • 我没有意识到 bin 返回一个字符串,虽然它以数字形式返回二进制格式。

标签: python python-2.7 binary-data


【解决方案1】:

您想使用从单个字符串返回整数的ord 函数,而不是返回二进制数的字符串表示形式的bin

【讨论】:

  • 糟糕,希望您在我应用 Ninja 修复程序之前没有看到此答案。
  • 我做到了。然后我刷新了一下,很开心。
【解决方案2】:

您应该尽可能使用struct,而不是为此编写自己的代码。

>>> struct.unpack('<H', '\x12\x34')
(13330,)

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2014-02-13
    相关资源
    最近更新 更多