读取二进制文件(Python)
我无法读取一个文件,不明白为什么:
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”,表示以二进制方式进行操作。否则,操作系统会默默地把它认为的“换行符”进行转换,这样就可能导致输入输出的数据出现错误。