2013-11-27 133 views
-2

我有一個.dat文件,其中包含超過40,000行包含文本和數據的行。我想從這個文件提取具體數據根據以下內容:從文本文件中讀取特定數據

我需要一個行計數器,顯然,所以我知道當我到達文件的末尾。 我想打開文件閱讀和另一個寫作,並閱讀第一行。如果從第一行開始的第2行位置以「Model」開始,我想要打開一個空行到打開的文件進行寫入,然後在文件中跳過兩行。如果第一行的第二行不是以「Model」開始,那麼我希望從第一行選擇8個位置的文本並將其打印到打開的文件中。然後我會從第一行移動11個位置,依此類推。

infile = open("ratios.dat","r") 
outfile = open("corr_ratios.txt","w") 

for aline in infile: 
    items = (aline+2).split() 
    if items[0] = "Model" 
     outfile.write("\n") 
     aline = aline+2 
    else  
     items = aline+8 
     outfile.write(items) 
+0

使用「aline」作爲計數器的for-loop(這裏可能是錯誤的)。在讀取文件時,我分割這一行,以便檢查第一個位置項[0](其中items = aline.split())是否等於「Model」。如果沒有,我將第一行讀取的8行數據複製下來,並將內容寫入其他打開的文件。我沒有測試它,所有在紙上,因爲我寫這個 - 只需要其他python程序員的意見... – stars83clouds

+0

你應該發佈你寫的代碼 – jramirez

回答

2

文件中蟒蛇是他們自己的迭代器,可與/可曾在一次像這樣先進的一行:

with open('path-to-file.txt') as infile: 
    for line in infile: 
    # code here to deal with line. 

此外,由於文件句柄是一個迭代器,它可以前進明確以及:

with open('path-to-file.txt') as infile: 
    for line in infile: 
    if condition: 
     # skip a line 
     next(infile) 

結合了兩下,你應該能夠使用線,跳線等

在仔細檢查了您的發佈代碼後,您正試圖向字符串添加整數(aline + 2)。走近你嘗試的方法,你居然做這樣的事情:

lines = infile.readlines() 
for lineno, line in enumerate(lines): 
    targetline = lines[lineno + 2] 

這種方法加載整個文件到內存中,根據您的文件大小可能會或可能不適合。

+0

我試着寫你的以上建議的東西。然而,看到行本質上是一個字符串,除非每次讀取時都增加一個整數索引,否則很難看出如何使用「行」跳過幾行。 – stars83clouds

+0

每次運行'for'循環時,都會消耗文件中的一行。每次你調用'next(infile)'時,你都會消耗另一個。範圍內的_(4):next(infile)'跳過四行。 –

+0

我明白這一點。但是,我想要有一條參考線,用於測試某些後續行(在此例中爲前兩行)的值。它是基於下一步的後續行的內容,即前面2個空格或11個空格。非常感謝您的建議。 – stars83clouds