我有多個文件,每個文件都帶有一行,每個文件大約有10M個數字。我想檢查每個文件併爲每個重複數字的文件打印一個0,每個文件不打印一個。如何在Python中逐字輸入一個單詞?
我正在使用一個列表來計算頻率。由於每行數量很大,我想在接受每個號碼後更新頻率,並在找到重複號碼後立即中斷。雖然這在C中很簡單,但我不知道如何在Python中執行此操作。
如何在不存儲(或輸入)整行的情況下以逐字的方式輸入一行?
編輯:我也需要一種方法來做到這一點從現場輸入,而不是一個文件。
我有多個文件,每個文件都帶有一行,每個文件大約有10M個數字。我想檢查每個文件併爲每個重複數字的文件打印一個0,每個文件不打印一個。如何在Python中逐字輸入一個單詞?
我正在使用一個列表來計算頻率。由於每行數量很大,我想在接受每個號碼後更新頻率,並在找到重複號碼後立即中斷。雖然這在C中很簡單,但我不知道如何在Python中執行此操作。
如何在不存儲(或輸入)整行的情況下以逐字的方式輸入一行?
編輯:我也需要一種方法來做到這一點從現場輸入,而不是一個文件。
讀取行,拆分行,將數組結果複製到一個集合中。如果設置的大小小於數組的大小,該文件包含重複的元素
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>
我根本不想讀取該行。這是問題的關鍵。 –
@supersonic_ht我剛更新了我的答案 – smac89
這很完美。花了我一段時間來圍繞itertools函數。輝煌! 當我在sys.stdin上調用函數時,實時輸入流也起作用。 –
你問這種方式是不可能的我想。你不能在Python中逐字閱讀。可以這樣做:
f = open('words.txt')
for word in f.read().split():
print(word)
我會很驚訝如果Python沒有辦法做一些看起來很簡單的事情。 –
@supersonic_ht它很簡單,但有點低級。 Python擅長抽象出一些低級別的東西,讓程序員的生活更輕鬆,這也是使它變得更好的一部分 – smac89
@Buddy:試着用搜索引擎通過字節輸入一字一句以及字節。什麼也沒有。 –
通過單詞,你的意思是數據類型,是嗎?不像書面文字? –
@supersonic_ht http://stackoverflow.com/questions/1035340/reading-binary-file-in-python-and-looping-over-each-byte – Buddy