我遇到了一個問題,在這個問題中我使用python生成器處理來自文件的文檔。我需要處理的文件數量未預先知道。每個文件都包含消耗大量內存的記錄。因此,發電機用於處理記錄。這是我工作的代碼摘要:跟蹤我們在生成器中處理多少個元素
def process_all_records(files): for f in files: fd = open(f,'r') recs = read_records(fd) recs_p = (process_records(r) for r in recs) write_records(recs_p)
我process_records功能檢查每個記錄的內容,只返回具有特定發件人的記錄。我的問題如下:我想對read_records返回的元素數進行計數。我一直在使用一個列表跟蹤的記錄數的process_records功能:
def process_records(r): if r.sender('sender_of_interest'): records_list.append(1) else: records_list.append(0) ...
這種方法的問題是,records_list可以不依賴於輸入式增長。我希望能夠消耗records_list的內容,一旦它增長到某個點,然後重新啓動該過程。例如,在處理了20條記錄之後,我想知道'sender_of_interest'有多少條記錄以及其他來源有多少條記錄,並清空了這個記錄。我可以不使用鎖嗎?
爲什麼不使用整數計數器而不是列表? – dano
好像你可以讓'read_records()'檢查'sender'並且只返回那些感興趣的東西。在這種情況下,您分配給'recs'的價值回報的長度將是生成器將處理的數量。 – martineau
是的,我可以。但我更喜歡你使用課堂的想法。我正在使用的代碼是由其他人編寫的,我寧願不要爲了我的目的而重構此代碼。謝謝。 –