2011-11-18 40 views
1

我需要在python程序中下載文件,有人告訴我要這樣做。需要有關如何使用python下載文件的明確說明

source = urllib2.urlopen("http://someUrl.com/somePage.html").read() 
open("/path/to/someFile", "wb").write(source) 

它工作得很好,但我想了解代碼。

當你有像

patatoe = 1 

不是一個變量?

,當你有這樣的:

blabla() 

不是定義一個函數?

請,我會喜歡正確理解代碼。

+2

我認識到,代碼(http://stackoverflow.com/questions/8116623/how-to-download-a-file-in-python)=) – chown

回答

1

您使用def關鍵字定義一個函數:

def f(): 
    ... 

沒有它,你只是調用該函數。 open(...)返回一個文件對象。然後用它來寫出數據。這實際上是一樣的:

f = open(...) 
f.write(source) 

這是不太一樣的,不過,因爲變量f保存到文件對象,直到它超出範圍,而調用open(...).write(source)創建一個臨時參考文件在write()返回後立即消失的對象。這樣做的結果是,單行表單將立即刷新並關閉文件,而雙行表單將保持文件打開狀態(可能緩衝部分或全部輸出),直到f超出範圍。

您可以在交互式shell觀察此行爲:

>>> f = open('xxx', 'w') 
>>> f.write('hello') 
>>> open('yyy', 'w').write('world') 

現在,無需退出交互式外殼,打開另一個終端窗口,檢查xxx和YYY內容。他們都會存在,但只有yyy會有任何東西。另外,如果你回到Python並調用f = Nonedel f,你會發現現在已經寫入了xxx。

+0

+ 1的全部。很好的答案! – chown

0

下面的代碼我給你的一天(How to download a file in python - 隨時免費的,如果您需要任何更多的細節/解釋到這裏,或對這一問題發表評論)的(希望理解)解釋:

# Open a local file called "someFile.html" for writing (like opening notepad.exe but not entering text yet) 
out_file = open("/path/to/someFile.html", "wb") 

# Connect to the server at someUrl.com and ask for "somePage.html" - the socket sends the "GET /somePage.html HTTP/1.1" request. 
# This is like typing the url in your browser window and (if there were an option for it) only getting the headers but not the page content yet. 
conn = urllib2.urlopen("http://someUrl.com/somePage.html") 

# Read the contents of the remote file "somePage.html". 
# This is what actually gets data from the web server and 
# saves the data into the 'pageSource' variable. 
pageSource = conn.read() 

# Write the data we got from the web page to our local file that we opened earlier: 'someFile.html' 
out_file.write(pageSource) 
1

的第一行是將文件下載結果分配給變量source。然後source寫入磁盤。

要回答你的更廣泛的要點:

  • 你說得對,變量與分配的等號(=)。我們在第一行所做的是將變量source分配給我們從URL接收到的任何內容。
  • 括號(())用於調用由def定義的函數。調用函數意味着要求函數執行。括號內的東西稱爲參數。

你應該Learn Python the Hard Way開始變得發生了什麼事的理解。

+0

+ 1的全部。很好的答案! – chown

2

詞「源」是一個變量。當你打電話的urllib2的方法的urlopen,並將它傳遞一個URL,它會打開該網址。然後你可以輸入「source.read()」來閱讀網頁(即下載它)。在你的例子中,它被合併成一行。見http://docs.python.org/library/urllib2.html

第二件打開文件。第一個參數是文件的路徑。 「wb」部分意味着它將以二進制模式寫入。如果文件已經存在,它將被覆蓋。通常情況下,我會這樣寫:

f = open("/path/to/someFile", "wb") 
f.write(source) 
f.close() 

你這樣做的方式是一條捷徑。當代碼運行並且腳本結束時,該文件將自動關閉。另請參閱http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files

+1

+ 1的全部。很好的答案! – chown

+0

實際上,在write()返回後,單表達式形式立即刷新並關閉文件。 –