Разбор файла с питоном - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь проанализировать файл в 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.

EDIT:

, когда я делаю:

if pattern_id :
   print(li)

вместо

if pattern_id in li:
   print(li)

Ничего не напечатано ...

Ответы [ 2 ]

0 голосов
/ 22 октября 2019
import csv
import re
with open(r'C:\Users\widnows\Desktop\file1.csv', "r", encoding='utf-8') as f:
    reader = csv.reader(f)
    your_list = [e[0].strip().split(",")[0] for e in reader if e]
your_list[1:]

>>['LOI_3456', 'HUI_6478', 'PETY_3564Bacteria1']

import string

s = s = '''d2234 d45564 d223098 d50923 PETY_354_d3456 d76533
d2635 PETY_354 d88593 d324623 HUI_6478_d3553d35626'''

result = re.findall('|'.join(your_list[1:]), s.translate({ord(c): None for c in string.whitespace}))
result
>>['HUI_6478']
0 голосов
/ 21 октября 2019

Я думаю, что проблема в регулярном выражении, которое вы здесь строите:

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

Tout pattern_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)
...