【发布时间】:2011-11-26 18:33:39
【问题描述】:
我正在通过 HTTPS 下载文件,我通过 urllib2.Request 请求文件,它们以 socket._fileobject 的形式返回。理想情况下,我希望将其流式传输到文件以避免将其加载到内存中,但我不确定如何执行此操作。
我的问题是,如果我在对象上调用 .read(),它只会返回直到第一个 NUL 字符的所有数据,并且不会读取整个文件。我该如何解决这个问题?
如果有帮助,NUL 字符会显示为 \x00,但不确定是什么编码
【问题讨论】:
-
也许您应该验证协议中是否允许 \X00 之后的数据。您是否尝试过其他一些库,例如 python 中的 curl pycurl.sourceforge.net.
-
.read()方法通常不关心 NUL 字节。您能否向我们展示您的代码和一些触发问题的示例输入? -
这并不容易,因为该文件来自需要身份验证的服务器。奇怪的是,
.readlines()将整个文件作为一个由\n字符分隔的列表,正如预期的那样,但read()只返回MZ,因为文件开始MZ ÿÿ,其中空格是NUL 字节。为什么read不能在readlines工作的地方工作?我应该在readlines上使用"".join来获取文件内容吗? -
调用
.read()不会读取整个数据。您必须继续调用它才能获取所有数据。请分享一些代码。 -
我应该分享什么代码有什么建议吗?我不能发出返回文件对象的调用,因为它由于身份验证而无法工作。我以为
.read()确实读取了整个数据,如果我再次调用它多次它什么也没有返回。 (有趣的是,"".join(f.readlines())只返回MZ,就像.read()一样。)