2015-02-23 83 views
-1

好的,我開始:這不是一個經常進行的過程,我不在乎過了一段時間(但我需要它完成並且不需要幾天),並且必須是在Python中。Python:讀萬文件並創建一個

我需要閱讀200萬HTML文件(4KB),並檢查它,只有一次,我在Python中創建一個更快的程序(我學習Python今天:/)

path = './files/*.htm' 
files = glob.glob(path) 
writer = open('myfile.txt','a+') 
for name in files: 
    try: 
     with open(name) as f: 
      for line in f.readlines(): 
       result = my_logic() 

      writer.write(result) #Concatenated string 

writer.close() 

和好了,我想當我以數百萬美元的價格運行這個計劃時,所有的事情都會爆炸,我的整個辦公室將會消失。 Sooo ...任何小建議? 我完全小白在Python,但我認爲我最困難的JavaScript創建此:P

編輯:

我解釋了我的問題,抱歉:P

這是打開文件的最好方法? 我不理解太多的Python,並明白'文件'var可以有一個巨大的大小(不知道是否保存值或僅供參考)與數百萬個文件讀取。

打開Writer並在整個程序中保持打開狀態?如果程序失敗,他每次寫入或失去全部時都會保存下來?

很抱歉給您帶來不便

+2

不,它不會爆炸,你正在處理一個文件在時間,一排在時間,我不明白這可能是如何沉重的系統。又是什麼問題? – 2015-02-23 17:57:20

+2

除了'result'沒有被定義在任何地方,對我來說看起來很好。運行它,看看它是否有效 - 它可能不會爆炸。 – Kevin 2015-02-23 17:57:30

+1

如果您知道自己的代碼有效,並且只是想普遍改進它,請嘗試詢問[代碼評論](http://codereview.stackexchange.com/)。 – Kevin 2015-02-23 17:59:29

回答

1

你正在創建使用readlines方法2000000不必要的名單,你還需要join名稱的路徑,你有8場音樂會的數據,這樣,除非你正在做一些嚴重的金額工作中my_logic()它不會需要幾天。

path = './files/' 
files = glob.glob(path) 
with open('myfile.txt', 'a+') as writer: 
    for name in glob.glob(path + "*.html"): 
     try: 
      with open(os.path.join(path, name)) as f: # join path and filename 
       for line in f: # iterate over file object 
        result = my_logic() 
       writer.write(result) #Concatenated string 
     except IOError as e: 
      print(e)