读取二进制文件(Python)

7 投票
4 回答
13368 浏览
提问于 2025-04-15 20:43

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

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

返回结果是:[]

我想打开一个PDF文件,提取里面的每一个字节,然后把它们放到一个列表里。

我的代码哪里出问题了呢? :(

谢谢!

4 个回答

1
  • 根据我对PDF格式的理解,PDF文件不应该是纯粹的二进制文件。它应该是一个文本文件,里面可能包含很多二进制数据。不过我可能理解错了。
  • 在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()会返回一个字符串,而对它调用list会把它变成一个字符列表(每个字符都是一个字节的字符串)。这种情况很少需要。
  • 无论是二进制文件还是文本文件,read都应该能正常工作。你确定test/test.pdf里有内容吗?Python似乎认为里面没有。
1

乔纳森说得对,如果你在Windows系统上,打开文件时应该使用二进制模式。

不过,PDF文件的开头是"%PDF-",无论你是否使用二进制模式,这部分内容都是可以读取到的。

所以我觉得你的"test/test.pdf"文件可能是个空文件。

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

在Windows系统上,读写文件时必须加上伪模式“b”,表示以二进制方式进行操作。否则,操作系统会默默地把它认为的“换行符”进行转换,这样就可能导致输入输出的数据出现错误。

撰写回答