2009-02-16 62 views
0

Okey这真的很奇怪。我有这个脚本,基本上下载一堆实现文件并提取它们。通常这些文件是.zip文件。今天我坐下来,决定让它与rar文件一起工作,我陷入困境。起初我认为问题出在我的unrar代码中,但它不在那里。所以我做:使用urllib2.urlopen下载.rar文件时缺少第一行()

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

赫克我甚至:

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

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

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

任何人都可以请解释我到底是怎么回事吗?它与文件类型有什么关系。

回答

2

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

+0

谢谢,我什至没有想到它。将输出转储到文本文件,然后是CR。至少我不会再犯错方向了。 – 2009-02-16 05:53:52

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'] 
>>>