使用urllib2.urlopen()下载.rar文件时缺少第一行

时间:2009-02-16 05:26:28

标签: python urllib2

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

f = urllib2.urlopen(file_location)
data = StringIO(f.read())
print data.getvalue()
我甚至做到了:

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

因为我只是想看到第一个块,结果是一样的 - 我错过了.rar文件的第一行。

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

有谁能解释一下这到底是怎么回事?它与文件类型有什么关系。

2 个答案:

答案 0 :(得分:3)

尝试确定二进制数据字符串的内容时,请使用repr()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']
>>>

答案 1 :(得分:2)

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