2017-04-06 80 views
0

我有一個巨大的單行文件,只包含空格分隔的單詞。我想運行一些額外的過濾。如何快速做到這一點?Python:如何處理一個巨大的單行文件?

目前,我有以下代碼:

with open("words.txt") as f: 
    lines = f.readlines() 

    for line in lines: 
     words = str(line).split(' ')   

     for w in words: 
      if is_allowed(w): 
       another_file.write(w + " ") 

但它是extremelly慢(〜1MB /秒)。如何加快速度?

回答

1

鑑於您將文件描述爲「巨大」,問題很可能是您的代碼需要將整個文件一次加載到內存中,然後複製它以執行拆分操作。

如果將文件視爲流,它應該快得多。按字符閱讀(char = f.read(1));如果字符不是空格或EOF以外的任何字符,請將其附加到臨時字符串。當你擊中一個空間時,處理你的臨時字符串,然後將其刪除並重新開始;當你擊中EOF時,處理你的臨時字符串,然後打破你的循環。

這樣一來,在任何特定時刻,您都不應該在內存中擁有多於一個單詞,這會大大加快您的處理速度。