0

在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.
4

2 回答 2

4

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

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

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

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

于 2013-07-27T02:58:03.900 回答
0

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

于 2013-07-27T02:44:31.287 回答