2011-10-30 67 views
0

我使用Python 3下載文件下載文件部分:由部分在Python 3

local_file = open(file_name, "w" + file_mode) 
local_file.write(f.read()) 
local_file.close() 

此代碼的工作,但它拷貝整個文件到內存第一。這是非常大的文件的問題,因爲我的程序變得內存餓了。 (從17M內存到240M內存爲200 MB文件)

我想知道是否有一種方式在Python下載一小部分文件(數據包),將其寫入文件,從它擦除內存,並繼續重複該過程,直到完全下載文件。

+2

可能重複[Lazy Method for Reading Big File in Python?](http://stackoverflow.com/questions/519633/lazy-method-for-reading-big-file-in-python) – chown

回答

3

嘗試使用此處介紹的方法:

Lazy Method for Reading Big File in Python?

我特別是指對接受的答案。讓我在這裏複製它,以確保完全清晰的答覆。

def read_in_chunks(file_object, chunk_size=1024): 
     """Lazy function (generator) to read a file piece by piece. 
     Default chunk size: 1k.""" 
     while True: 
      data = file_object.read(chunk_size) 
      if not data: 
       break 
      yield data 


    f = open('really_big_file.dat') 
    for piece in read_in_chunks(f): 
     process_data(piece) 

這可能適合您的需求:它以較小的塊讀取文件,允許在不填充整個內存的情況下進行處理。如果您還有其他問題,請回來。

+0

什麼方法是你甚至指的是? – random

+0

我鏈接到的一個,我將再次鏈接到這裏:[link](http://stackoverflow.com/questions/519633/lazy-method-for-reading-big-file-in-python) – Brendon

+0

你只是與問題相關聯。哪個答案是你建議的方法? – random