我正在處理一個Python腳本以處理兩個文件 - 一個包含UUID列表,另一個包含大量日誌條目 - 每行包含另一個文件中的一個UUID。該程序的目的是從file1創建一個UUIDS列表,然後每次在日誌文件中找到UUID時,每找到一個匹配就增加相關值。Python中用於遍歷大文件(10GB +)的最有效方式
這麼長的故事,請記下每個UUID在日誌文件中出現的次數。 目前,我有一個以UUID作爲關鍵字填充的列表,並且'命中'作爲值。然後再循環遍歷日誌文件的每一行,並檢查日誌中的UUID是否與UUID列表中的UUID匹配。如果匹配,則增加該值。
for i, logLine in enumerate(logHandle): #start matching UUID entries in log file to UUID from rulebase
if logFunc.progress(lineCount, logSize): #check progress
print logFunc.progress(lineCount, logSize) #print progress in 10% intervals
for uid in uidHits:
if logLine.count(uid) == 1: #for each UUID, check the current line of the log for a match in the UUID list
uidHits[uid] += 1 #if matched, increment the relevant value in the uidHits list
break #as we've already found the match, don't process the rest
lineCount += 1
它的工作原理應該如此 - 但我相信有更高效的文件處理方式。我已經通過一些指南,發現使用'count'比使用編譯正則表達式更快。我認爲以塊爲單位而不是逐行讀取文件可以通過減少磁盤I/O時間來提高性能,但在測試文件上的性能差異〜200MB是可以忽略的。如果任何人有任何其他方法,我會非常感謝:)
無論您實際讀取的區塊的大小如何,通常都會緩衝文件I/O。 – delnan 2011-06-02 13:59:26
它需要更高效嗎?多久時間?你需要多長時間?您可能已經達到了您的存儲(磁盤)的性能限制,在這種情況下,您的Python腳本的速度有多快並不重要。 – 2011-06-02 14:05:35
它現在正在運行一個測試文件 - 它是通過10GB文件的一半,大約需要30分鐘。作爲我第一次出場的Python,我不知道這是快還是慢。沒有要求它在x分鐘內完成,但速度更快;) – SG84 2011-06-02 14:09:49