首页 > 解决方案 > 用python解析文件

问题描述

我正在尝试在 python 中解析一个文件。我有一个这样的文件:

ID number        Name
LOI_3456         Bacteria1       
HUI_6478         Bacteria1
PETY_3564        Bacteria1

所以首先我收集了每个细菌的所有 ID_number:

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]

现在在另一个文件中,我有这样的东西:

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_member 匹配的行。

编辑 :

当我做 :

if pattern_id :
   print(li)

代替

if pattern_id in li:
   print(li)

什么都没有打印...

标签: pythonregexfileparsing

解决方案


我认为问题出在您在这里构造的正则表达式中:

pattern_id_number = re.search(ID_number+'_\d+', li)

Toutpattern_id_number等于类似的东西HUI_6478,当您添加时,\d+您会得到一个正则表达式,例如:

HUI_6478_\d+

此正则表达式与您的第二个文件中的任何内容都不匹配。我不知道所需的输出,但看起来您需要将正则表达式创建更新为:

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)

推荐阅读