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 个相似 "pages"):
//
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
//
print(car)
正在打印第一个 if 中由 PWD_ID.append(PWY_ID_line[2])
添加的所有行的列表,因为当您将 PWD_ID 的整个列表附加到 car
时你做 car.append(PWY_ID)
。
所以,如果你想用 OLEANDOMYCIN 打印出行列表,你可能只想做 car.append(line)。
我认为如果您发布了一些数据示例会很有帮助。但您要查找的内容的近似值是:
with open('pathways.dat','r', errors='ignore') as infile:
i = infile.read().find(string_to_search)
infile.seek(i+number_of_chars_to_read)
希望这段代码能帮助您将脚本集中在这一行上。
我正在编写一个代码,逐行读取一个大文本文件并找到以 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 个相似 "pages"):
//
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
//
print(car)
正在打印第一个 if 中由 PWD_ID.append(PWY_ID_line[2])
添加的所有行的列表,因为当您将 PWD_ID 的整个列表附加到 car
时你做 car.append(PWY_ID)
。
所以,如果你想用 OLEANDOMYCIN 打印出行列表,你可能只想做 car.append(line)。
我认为如果您发布了一些数据示例会很有帮助。但您要查找的内容的近似值是:
with open('pathways.dat','r', errors='ignore') as infile:
i = infile.read().find(string_to_search)
infile.seek(i+number_of_chars_to_read)
希望这段代码能帮助您将脚本集中在这一行上。