簡體   English   中英

Python提取文本文件中的特定行

[英]Python extracting specific line in text file

我正在編寫一個代碼,它逐行讀取一個大文本文件,並找到以 UNIQUE-ID 開頭的行(文件中有很多),它就在某一行之前(在本例中,以 'REACTION-LAYOUT -' 開頭,其中字符串中的第 5 個元素是 OLEANDOMYCIN)。 代碼如下:

data2 = open('pathways.dat', 'r', errors = 'ignore')

pathways = data2.readlines()

PWY_ID = []
line_cont = []
L_PRMR = [] #Left primary
car = []

#i is the line number (first element of enumerate), 
#while line is the line content (2nd elem of enumerate)

for i,line in enumerate(pathways):
    if 'UNIQUE-ID' in line:
        line_cont = line
        PWY_ID_line = line_cont.rstrip()
        PWY_ID_line = PWY_ID_line.split(' ')
        PWY_ID.append(PWY_ID_line[2])
    elif 'REACTION-LAYOUT -' in line:
        L_PWY = line.rstrip()
        L_PWY = L_PWY.split(' ')
        L_PRMR.append(L_PWY[4])
    elif 'OLEANDOMYCIN' in line:
        car.append(PWY_ID)
print(car)

但是,輸出是所有包含 PWY_ID 的行(第一個 if 語句的輸出),就像它忽略了所有其余代碼一樣。 有人可以幫忙嗎?

編輯


下面是我的數據示例(我的文本文件中有 1000 個類似的“頁面”):

//
UNIQUE-ID - PWY-741
.
.
.
.
PREDECESSORS - (RXN-663 RXN-662)
REACTION-LAYOUT - (RXN-663 (:LEFT-PRIMARIES CPD-1003) (:DIRECTION :L2R) (:RIGHT-PRIMARIES CPD-1004))
REACTION-LAYOUT - (RXN-662 (:LEFT-PRIMARIES CPD-1002) (:DIRECTION :L2R) (:RIGHT-PRIMARIES CPD-1003))
REACTION-LAYOUT - (RXN-661 (:LEFT-PRIMARIES CPD-1001) (:DIRECTION :L2R) (:RIGHT-PRIMARIES CPD-1002))
REACTION-LIST - RXN-663
REACTION-LIST - RXN-662
REACTION-LIST - RXN-661
SPECIES - TAX-351746
SPECIES - TAX-644631
SPECIES - ORG-6335
SUPER-PATHWAYS - PWY-5266
TAXONOMIC-RANGE - TAX-1224
//

我認為如果您發布一些數據示例會有所幫助。 但是您正在尋找的近似值是:

with open('pathways.dat','r', errors='ignore') as infile:
  i = infile.read().find(string_to_search)
  infile.seek(i+number_of_chars_to_read)

我希望這段代碼能幫助您將腳本集中在這一行上。

print(car)在第一個 if 中打印出由PWD_ID.append(PWY_ID_line[2])添加的所有行的列表,因為當您執行car.append(PWY_ID)時,您將car.append(PWY_ID)的整個列表附加到car 所以,如果你想用 OLEANDOMYCIN 打印出行列表,你可能只想做 car.append(line)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM