【问题标题】:convert a binary file in a list (python)转换列表中的二进制文件(python)
【发布时间】:2011-01-30 14:39:23
【问题描述】:

我希望能够打开一个二进制文件,并制作一个包含所有字符的列表(一种数组),例如:"\x21\x23\x22\x21\x22\x31" to [" \x21","\x23","\x22","\x21","\x22","\x31"] 转换它的最佳解决方案是什么?

谢谢!

【问题讨论】:

    标签: python list binary


    【解决方案1】:

    您需要了解“\x21”和“!”是表示同一事物的两种方式

    所以"\x21\x23\x22\x21\x22\x31"'!#"!"1' 相同

    >>> "\x21\x23\x22\x21\x22\x31"  == '!#"!"1'
    True
    
    >>> infile = open('infile.txt', 'rb')
    >>> list(infile.read())
    ['!', '#', '"', '!', '"', '1']
    >>> ['!', '#', '"', '!', '"', '1'] == ["\x21","\x23","\x22","\x21","\x22","\x31"]
    True
    

    所以你看它们是一样的,但是 python 总是试图选择最用户友好的方式来显示字符

    【讨论】:

      【解决方案2】:

      您可以像处理文本数据一样将二进制数据读入字符串,只需确保以二进制模式打开文件(调用open() 中的b 标志):

      with open('file.bin', 'rb') as f:
         data = f.read()
      

      data 现在包含文件中的字符作为字符串,例如"\x21\x23\x22\x21\x22\x31"

      【讨论】:

        【解决方案3】:

        假设myfile.txt 里面有'abcdef\n'...

        >>> fh = open('myfile.txt', 'rb')
        >>> list(fh.read())
        ['a', 'b', 'c', 'd', 'e', 'f', '\n']
        

        【讨论】:

          【解决方案4】:

          要制作“一种数组”的字符,一种非常有效的方法(比使用列表更有效!)是使用 Python 的标准库 array 模块:

          res = array.array('c')
          with open('binaryfile', 'rb') as f:
              while True:
                  try: res.fromfile(f, 1024 * 1024)
                  except EOFError: break
          

          这一次读取不超过一兆字节(即1024 * 1024),但会一直持续到文件全部完成 - 当然,您可以根据需要调整该行为。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-01-31
            • 2012-10-16
            • 1970-01-01
            • 2011-05-12
            • 1970-01-01
            • 2014-08-25
            • 2020-06-20
            相关资源
            最近更新 更多