2017-05-27 55 views
0

嘿,我的傢伙停留在這個錯誤,我真的需要幫助:打開了太多的文件,而使用numpy的負載

錯誤是:打開的文件太多。

 for i in data_files[:8]: 
      try: 
       data_temp = np.load(i) 
       nat_queue += data_temp['nat_queue'].tolist() 
       temp_radius = data_temp['temp_radius'].tolist() 
       final_radius += data_temp['final_radius'].tolist() 
       del data_temp.f 
       data_temp.close() 
       os.unlink(os.path.join('/tmp/rad_data', i)) 
      except: 
       pass 
當我運行這段代碼RAM(系統內存)

線性增加,一段時間後,我有太多打開的文件。 我該怎麼做.. ??

任何幫助或建議,將不勝感激?

+1

除外:通行證不是好的做法,因爲您對發生的事情信息鬆動。嘗試打印錯誤 - 我會認爲del data_temp.f存在一些問題 - 那麼close語句會被跳過。 – rammelmueller

+0

'nat_queue','temp_radius','final_radius'會發生什麼...... 列表佔用大量空間... –

回答

1

你應該使用「上下文管理」機制,當你在多陣​​列的文件稱np.load()這樣的:

for path in data_files[:8]: 
    with np.load(path) as arc: 
     nat_queue += arc['nat_queue'].tolist() 
     temp_radius = arc['temp_radius'].tolist() 
     final_radius += arc['final_radius'].tolist() 
    os.unlink(os.path.join('/tmp/rad_data', path)) 

這樣,陣列arc的檔案將被關閉。順便說一下,如果輸入量很大,那麼通過將所有數據轉換爲列表,您都沒有好處。您可以將每個加載的數組附加到數組列表中,然後在末尾執行np.concatenate(list_of_arrays)以從所有文件的內容中獲取單個大數組。

+0

thanx for reply。你的回答似乎很合理,我一定會嘗試 – DonJon