确保file.read将读取整个文件?

时间:2013-07-27 00:41:59

标签: python io

在python中我可以写

content = open(filename, 'r').read()

将整个文件读入content变量。但是,在我的带有Python 2.7.5的Windows机器上,对于某些大文件,这只读取255个字节。仔细查看file.read的文档,可以看出只能在阻塞模式下读取整个文件。如何启用阻止模式以确保读取整个文件?

read(...)
    read([size]) -> read at most size bytes, returned as a string.

    If the size argument is negative or omitted, read until EOF is reached.
    Notice that when in non-blocking mode, less data than what was requested
    may be returned, even if no size parameter was given.

2 个答案:

答案 0 :(得分:4)

  

我遇到问题的文件是tarball,zip文件和   Windows可执行文件(安装程序)大小约为5 MiB。

您正在以文本模式打开二进制文件。然后,在Windows上,读取将在遇到文件结束标记时结束。它还将在Windows上将'\r\n'的Windows行结尾转换为'\r'

通过添加'b'标志,您可以在二进制模式下打开它,这样可以准确地返回文件中的内容。

除此之外,如果在文本模式下打开,Python 3将尝试将文件数据解码为Unicode。所以总是以二进制模式打开二进制文件。

答案 1 :(得分:0)

您可能希望使用open(fn,“rb”)以二进制模式打开它。 Windows和Linux具有不同的编码和解码。当您以二进制模式打开文件并从中读取数据时,您获得的是一个bytes对象。输入不进行解码,输出无编码。当读取或写入字节对象时,您将获得传输的数据,而不会尝试更改它。