2016-06-11 45 views
1

我有多個文件,每個文件都帶有一行,每個文件大約有10M個數字。我想檢查每個文件併爲每個重複數字的文件打印一個0,每個文件不打印一個。如何在Python中逐字輸入一個單詞?

我正在使用一個列表來計算頻率。由於每行數量很大,我想在接受每個號碼後更新頻率,並在找到重複號碼後立即中斷。雖然這在C中很簡單,但我不知道如何在Python中執行此操作。

如何在不存儲(或輸入)整行的情況下以逐字的方式輸入一行?

編輯:我也需要一種方法來做到這一點從現場輸入,而不是一個文件。

+0

@Buddy:試着用搜索引擎通過字節輸入一字一句以及字節。什麼也沒有。 –

+0

通過單詞,你的意思是數據類型,是嗎?不像書面文字? –

+1

@supersonic_ht http://stackoverflow.com/questions/1035340/reading-binary-file-in-python-and-looping-over-each-byte – Buddy

回答

1

讀取行,拆分行,將數組結果複製到一個集合中。如果設置的大小小於數組的大小,該文件包含重複的元素

with open('filename', 'r') as f: 
    for line in f: 
     # Here is where you do what I said above 

讀取由字的文件的話,試試這個

import itertools 

def readWords(file_object): 
    word = "" 
    for ch in itertools.takewhile(lambda c: bool(c), itertools.imap(file_object.read, itertools.repeat(1))): 
     if ch.isspace(): 
      if word: # In case of multiple spaces 
       yield word 
       word = "" 
      continue 
     word += ch 
    if word: 
     yield word # Handles last word before EOF 

然後,你可以這樣做:

with open('filename', 'r') as f: 
    for num in itertools.imap(int, readWords(f)): 
     # Store the numbers in a set, and use the set to check if the number already exists 

此方法也適用於流,因爲它一次只讀取一個字節,並從輸入流輸出單個空格分隔的字符串。


在給出這個答案之後,我已經更新了這個方法。看看

<script src="https://gist.github.com/smac89/bddb27d975c59a5f053256c893630cdc.js"></script>

+0

我根本不想讀取該行。這是問題的關鍵。 –

+0

@supersonic_ht我剛更新了我的答案 – smac89

+0

這很完美。花了我一段時間來圍繞itertools函數。輝煌! 當我在sys.stdin上調用函數時,實時輸入流也起作用。 –

0

你問這種方式是不可能的我想。你不能在Python中逐字閱讀。可以這樣做:

f = open('words.txt') 
for word in f.read().split(): 
    print(word) 
+0

我會很驚訝如果Python沒有辦法做一些看起來很簡單的事情。 –

+0

@supersonic_ht它很簡單,但有點低級。 Python擅長抽象出一些低級別的東西,讓程序員的生活更輕鬆,這也是使它變得更好的一部分 – smac89

相關問題