读取二进制文件(python)

时间:2010-03-23 01:46:20

标签: python file io

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

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

返回:[]

我想打开一个PDF,并提取每个字节,并将其放入List。

我的代码出了什么问题? :(

谢谢,

4 个答案:

答案 0 :(得分:11)

f = open("test/test.pdf", "rb")

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

答案 1 :(得分:1)

Jonathan是正确的,如果你在Windows上,你应该以二进制模式打开文件。

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

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

答案 2 :(得分:0)

  • 据我所知,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似乎并不认为有。

答案 3 :(得分:0)