Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python解析文件_Python_Regex_File_Parsing - Fatal编程技术网

用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 ... 所以首先

我正在尝试用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_编号:

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)
Tout
pattern\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
。看到打字错误了吗?谢谢!很明显…。很抱歉给您带来不便