2017-09-02 68 views
1

我有,我有按行讀入行,然後用正則表達式,從我中提取有用的數據分析一些數據列表:閱讀和線記住文件行蟒蛇

現在的代碼如下所示:

counter = 0 # first line of the file 

with open(data) as f: 
    for line in f: 
     counter += 1 
     f.readlines()[counter] 
     ... 
     name = re.search(r'(?<=-)\d.*?(?=\s)', line) 
     ... 

所以現在line有文本文件的第一行,我可以應用一些正則表達式來提取數據,主要問題是它似乎沒有按預期工作,我知道該解決方案不是優雅的,但我需要的是:

  • 有一個變量,直到下一次迭代

  • 檢查想起了一個單行如果在文件的結尾,然後退出

  • 所有文件行不能一次

  • 解析

    文本文件的更多鈔票大小是不知道

我心疼我的解決方案,因爲它不是在所有pytonish並有可能進一步促如果我不得不處理大量數據,那麼就會出現瑕疵。我真的搜查了很多東西,沒有發現對我的情況有用。

+0

'f.readlines()'一次讀取整個文件,沒有爲'f'中的行寫入數據。去掉它。 – DyZ

回答

1

當你做for line in f你正在逐行遍歷文件,所以你不需要除了你的情況以外的任何東西。例如:

with open(data) as f: 
    for line in f: 
     line = line.rstrip() # <- use this if you want to get rid of new line character 
     name = re.search(r'(?<=-)\d.*?(?=\s)', line) 
     # your code 

這也將停止循環並在文件結束時關閉文件,因此您不必擔心這一點。

+0

它不是一次解析整個文件嗎?該代碼邏輯的原因是,提取的數據將用於更改目錄和git commit消息,所以提交數據取決於文件條目,應該不同(例如,如果我有60個文件輸入,我將擁有使60個不同的提交:)) –

+0

它將被逐行解析,就像它會在整個代碼執行後跳到下一行。 –

+0

在f.read()中使用'for line。splitlines():'不需要使用'line = line.rstrip()'。 –