【问题标题】:read a binary file (python)读取二进制文件(python)
【发布时间】:2010-03-23 01:46:20
【问题描述】:

我无法读取文件,我不明白为什么:

f = open("test/test.pdf", "r")
data = list(f.read())
print data

返回:[]

我想打开一个 PDF,提取每个字节,然后把它放在一个列表中。

我的代码有什么问题? :(

谢谢,

【问题讨论】:

  • test/test.pdf 中有多少字节?

标签: python file io


【解决方案1】:
f = open("test/test.pdf", "rb")

在 Windows 上读写时,您必须包含二进制的伪模式“b”。否则操作系统会默默地翻译它认为是“行尾”的内容,从而导致 i/o 损坏。

【讨论】:

    【解决方案2】:

    Jonathan 说得对,如果您在 Windows 上,您应该以二进制模式打开文件。

    但是,PDF 文件将以“%PDF-”开头,无论您是否使用二进制模式,至少都会读入该文件。

    所以在我看来,您的“test/test.pdf”是一个空文件

    【讨论】:

      【解决方案3】:
      • 据我所知 pdf 格式,pdf 文件不应该是二进制文件。它应该是一个可能包含大量二进制 blob 的文本文件。我可能是错的。
      • 在 Windows 上,如果您要打开二进制文件,则需要在文件模式中包含 b,即 open(filename, "rb")
        • 在类 Unix 系统上,b 不会造成任何伤害,尽管它没有任何意义。
      • 始终对文件使用上下文管理器。也就是说,不要写f = open("test/test.pdf", "rb"),而是说with open("test/test.pdf", "r") as f:。这将确保您的文件始终被关闭。
      • list(f.read()) 不太可能经常成为有用的代码。 f.read() 重新生成 str 并在其上调用 list 生成字符列表(单字节字符串)。这很少需要。
      • 二进制或文本或其他,read 应该可以工作。您确定test/test.pdf 中有任何内容吗? Python 似乎认为没有。

      【讨论】:

        【解决方案4】:

        你在什么平台上运行?

        在 Windows XP 上使用 python 2.6,我得到:

        f = open("14500lf.pdf", "r")
        数据 = 列表(f.read())
        打印数据
        ['%', 'P', 'D', 'F', '-', '1', '.', '5', '\r', '%', '\xe2', '\xe3 '、'\xcf'、'\xd3'、'\n'、'1'、''、'0'、''、'o'、'b'、'j'、''、'>'、'\r'、'e'、'n'、'd '、'o'、'b'、'j'、'\r'、'2'、''、'0'、''、'o'、'b'、'j'、''、'>'、'/'、'F'、'o'、'n '、't'、''、'>'、'/'、'P'、'r'、'o'、'c'、' S'、'e'、't'、'['、'/'、'P'、'D'、'F'、'/'、'T'、'e'、'x'、't' , ']', '>', '>', '\r', 'e', 'n', 'd', 'o', 'b', 'j', '\r', '3' ,'','0','','o','b','j',''、'>'、's'、't'、'r'、'e'、'a'、'm'、'\n'、'H'、 '\x89'、'\xa4'、'W'、'\xd9'、'r'、'T'、'\xc9'、'\x11'、'\xfd'、'\x82'、'\xfb ', '\x0f', '\xf5', '\xd8', '\n', '\x8f', '\x8a', '\xda', '\x97', 'G', '!', '\x04', '\x06', '\x03']

        在我的桌面上碰巧有一个 PDF(它是 IC 数据表 LTC1450

        使用“rb”(读取二进制):

        f = open("14500lf.pdf", "rb")
        数据 = 列表(f.read())
        打印数据
        ['%', 'P', 'D', 'F', '-', '1', '.', '5', '\r', '%', '\xe2', '\xe3 '、'\xcf'、'\xd3'、'\r'、'\n'、'1'、''、'0'、''、'o'、'b'、'j'、'', '>', '\r', 'e',

        ....剪掉几千行...

        '9'、'1'、''、'0'、''、'R'、'/'、'I'、'D'、'['、''、''、']'、'> '、'>'、'\r'、'\n'、's'、't'、'a'、'r'、't'、'x'、'r'、'e'、'f ', '\r', '\n', '2', '9', '0', '2', '6', '9', '\r', '\n', '%', '%', 'E', 'O', 'F', '\r', '\n']

        【讨论】:

          猜你喜欢
          • 2012-02-01
          • 2017-11-27
          • 2011-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多