我試圖在文件中尋找一個令牌':path',然後將所有以下(任意數字)數字作爲數字讀取(因此對於':path, 123'我尋找,在文件然後讀取整數123)。然後讀取當前搜索位置和pos + 123之間的字符(將它們存儲在列表中或其他內容中)。然後尋找,直到':path'的下一個匹配項,然後重複這個過程。使用python在大文件中尋找正則表達式
我想的功能有點像:
def fregseek(FILE, current_seek, /regex/): . . value_found = ? # result of reading next N chars after :path,[0-9]+ . . return next_start_seek, value_found
可以有任何數量的匹配:在一條線上「路徑」,並且之後指定字符數內可能出現的字符串' 「。我寫了一堆亂七八糟的垃圾,在每一行中讀取,然後對於匹配指示的前N個字符的每一行,然後繼續處理字符串,直到它全部被吃掉。然後讀取下一個字符串等。
這太可怕了,我不想從一個潛在的巨大文件中汲取所有的線,當我真正需要做的就是尋找(尤其是因爲換行是無關緊要的,所以有一個額外的處理步驟只是因爲線很容易從文件中拉出是荒謬的)。
所以,那就是,這是我想解決的問題。我需要尋找一個匹配,讀取一個值,從該值的末尾繼續尋找下一個匹配,等等,直到文件耗盡。
如果有人能幫助我,我會很樂意向他們聽到:)
我想避免不規範的庫如果可能的話,我也想在最短的代碼,但是這是最的我的擔憂(速度和內存消耗是重要的因素,但我不想讓50個loc更多,只是爲了引導一些庫中有一個小功能,如果只知道它是什麼的話我就可以剔除)。我寧願使用python代碼,但是,如果perl在這方面跳動python,我將使用perl,而我也打開聰明的sed/awk/bash腳本等,只要它們不會非常慢。
非常感謝。
是否需要使用正則表達式?如果你只是試圖尋找一個像「:path」這樣的標記,那就沒有必要了,如果你只是做一個字符串搜索,它會更容易(也更高效)。 – abarnert
此外,你一直在談論尋找,但沒有掃描所有字節沒有辦法搜索,我沒有看到任何你不能做的一次通過,所以我不知道爲什麼你需要任何尋求一切。 – abarnert
感謝您的寶貴意見。如果我不必一次讀入整個文件,字符串搜索就沒有問題,但是我必須高效地處理讀入的任何塊。我不確定是否有更好的方法比全部讀取更好,儘管我希望能夠處理任意大的文件。理想情況下,我想有幾個選擇的基準,但現在我只是有我的蹩腳的代碼,有已經回答很多比我現在:) – sillyMunky