0

好吧,这真的很奇怪。我有这个脚本,它基本上下载了一堆实现文件并提取它们。通常这些文件是 .zip 文件。今天我坐下来决定让它与 rar 文件一起工作,但我卡住了。起初我认为问题出在我的解压缩代码中,但它不存在。所以我做了:

f = urllib2.urlopen(file_location)
data = StringIO(f.read())
print data.getvalue()

哎呀,我什至做了:

f = urllib2.urlopen(file_location)
print f.read()

因为我只是想查看第一个块,结果是一样的——我缺少 .rar 文件的第一行。

如果我使用网络浏览器下载相同的文件,一切都很好,它没有损坏。

谁能解释一下这里到底发生了什么?它与文件类型有什么关系。

4

2 回答 2

3

当试图确定二进制数据字符串的内容时,使用repr()or hex()。例如,

>>> print repr(data)
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t'
>>> print [hex(ord(c)) for c in data]
['0x0', '0x1', '0x2', '0x3', '0x4', '0x5', '0x6', '0x7', '0x8', '0x9']
>>>
于 2009-02-16T06:10:34.533 回答
2

数据是否可能包含“回车”字符(“\r”),以便在您尝试显示第一个块时被后续数据覆盖?这可以解释为什么您在输出中看不到第一个块,但不能解释为什么您以后无法对其进行解码。

于 2009-02-16T05:36:53.710 回答