2012-08-07 49 views
2

我與蟒蛇一個初學者,我試圖通過谷歌來學習和一些書籍......我工作在一個特定的項目,做的不錯用它輸入文件中的某些行到目前爲止...Python的 - 刪除基於內容

我的計劃的第一部分接收輸入的文本文件,並掃描線中的某些數據,它然後寫入行背出一個新的文件,如果不滿足搜索標準...

我所做的是醜陋的地獄,但它也很慢......當我在Raspberry Pi上運行它時,這部分需要4秒鐘時間(輸​​入文件超過1700行文本)

這裏是我的努力:

with open('mirror2.txt', mode='r') as fo: 
     lines = fo.readlines() 
     with open('temp/data.txt', mode='w') as of: 
      for line in lines: 
       date = 0 
       page = 0 
       dash = 0 
       empty = 0 
       if "Date" in line: date += 1 
       if "Page" in line: page += 1 
       if "----" in line: dash += 1 
       if line == "\n": empty += 1 
       sum = date + page + dash + empty 
       if sum == 0: 
        of.write(line) 
       else:() 

我不好意思地表明,在公衆,但我很樂意看到一個「Python化」的方式來做到這一點更優雅

任何幫助(以及更快!) ?

+0

不想使用'sum',巨蟒已經做的內置。那麼'total'呢? – Levon 2012-08-07 23:46:02

+0

Date,Page和----可能在同一行嗎?如果不是的話,你可以使用'elif',這樣,在if中的一個成立之後,並不是所有的if都會被測試。另外,還有什麼與'else :()'部分? – Levon 2012-08-07 23:47:56

+0

不,他們會在不同的線路,基本上我需要掃描的那些字符串,並拋出帶有字符串中的線......在同一時間刪除空白。 – user1583260 2012-08-07 23:52:27

回答

0

的讀取一行的基礎線文件的Python化的方式將是,適用於您的情況:

with open('mirror2.txt', mode='r') as fo: 
    for line in fo: 
     # Rest 

如果這明顯加快了你的程序,那豈不是Python解釋器沒有做在管理ARM處理器上的內存方面做得很好。

其餘已經在評論中提到。

+0

謝謝你,我不知道我可以像這樣直接解決文件...這有點提高了速度,但它對我來說似乎仍然很慢。從4秒左右到3秒左右,25%不差!也許樹莓派硬件是瓶頸,我在64位win7筆記本電腦上編寫代碼,所以它立即在那裏運行... – user1583260 2012-08-08 00:11:35

2

要回答你的問題,以下是這樣做的Python的方式:

import re 

expr = re.compile(r'(?:Date|Page|----|^$)') 
with open('mirror2.txt', mode='r') as infile: 
    with open('data.txt', mode='w') as outfile: 
     for line in infile: 
      if not expr.search(line.strip()): 
       outfile.write(line) 
+0

謝謝,這是更好看!我將使用它,然後閱讀正則表達式,以便我可以真正理解它的作用!我測試過它,並沒有產生任何速度改進,但它看起來比我上面醜陋的kludge效率更高! – user1583260 2012-08-08 00:15:13