2009-02-16 60 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'] 
>>>