用python解析文件
我正在尝试用python解析一个文件。我有这样一个文件:用python解析文件,python,regex,file,parsing,Python,Regex,File,Parsing,我正在尝试用python解析一个文件。我有这样一个文件: ID number Name LOI_3456 Bacteria1 HUI_6478 Bacteria1 PETY_3564 Bacteria1 d2234 d45564 d223098 d50923 PETY_354_d3456 d76533 d2635 PETY_354 d88593 d324623 HUI_6478_d3553d35626 ... 所以首先
ID number Name
LOI_3456 Bacteria1
HUI_6478 Bacteria1
PETY_3564 Bacteria1
d2234 d45564 d223098 d50923 PETY_354_d3456 d76533
d2635 PETY_354 d88593 d324623 HUI_6478_d3553d35626
...
所以首先我收集了每个细菌的所有ID_编号:
import re
f = open("file.tsv","r")
f.readline()
for line in f.readlines():
line = li.rstrip("\n")
line = li.rsplit("\t")
ID_number = li[0]
在另一个文件中,我有如下内容:
ID number Name
LOI_3456 Bacteria1
HUI_6478 Bacteria1
PETY_3564 Bacteria1
d2234 d45564 d223098 d50923 PETY_354_d3456 d76533
d2635 PETY_354 d88593 d324623 HUI_6478_d3553d35626
...
现在我用同样的脚本写了这个:
cnt = 0
f2 = open("file2","r")
for li in f2.readlines():
li = li.rstrip("\n")
pattern_id_number = re.search(ID_number+'_\d+', li)
if pattern_id number in li:
print("line :",n, li)
但这不起作用。我想要的是保留与我的pattern_id_成员匹配的行
编辑:
当我这样做时:
if pattern_id :
print(li)
而不是
if pattern_id in li:
print(li)
没有打印任何内容…我认为问题在于您在此处构造的正则表达式:
pattern_id_number = re.search(ID_number+'_\d+', li)
Toutpattern\u id\u number
等于类似于HUI\u 6478
的值,当您添加\d+
时,您会得到一个regexp,如:
HUI_6478_\d+
此regexp与第二个文件中的任何内容都不匹配。
我不知道所需的输出,但看起来您需要将regexp创建更新为以下内容:
pattern_id_number = re.search(ID_number + '_\w\d+', li)
然后您将得到一个输出:
line : d2635 PETY_354 d88593 d324623 HUI_6478_d3553d35626
编辑:是的,上面的评论也是有效的,你需要
if pattern_id_number:
print("line :", li)
使用
if pattern\u id\u number:
代替li:中的if pattern\u id number。也,您可以使用f2中的li的来迭代file2
文件中的行。您是说第一个文件的ID号将包含在第二个文件中吗?第一个文件的ID号出现在文件2中的某些行上,但后面有下划线。请注意:您在pattern\u id\u number=re.search(id\u number+“\u\d+”,li)
,但如果li中的pattern\u id number:
,则在中检查pattern\u id number
。看到打字错误了吗?谢谢!很明显…。很抱歉给您带来不便