#python
#python
Вопрос:
У меня есть документ со следующим форматированием;
QUERY: STBZIP38
Length of Query Sequence: 2000 bp | Nucleotide Frequencies: A - 0.34 G - 0.16 T - 0.35 C - 0.15
TFBS AC: RSP00073//OS: tobacco (Nicotiana tabacum) /GENE: synthetic oligonucleotides/TFBS: PA /BF: TAF-1
Motifs on " " Strand: Mean Exp. Number 0.00391 Up.Conf.Int. 1 Found 1
421 tCCACGTGGC 430 (Mism.= 1)
Motifs on "-" Strand: Mean Exp. Number 0.00391 Up.Conf.Int. 1 Found 1
430 GCCACGTGGa 421 (Mism.= 1)
TFBS AC: RSP00153//OS: Parsley, Petroselinum crispum /GENE: CHS/TFBS: Box II /BF: CPRF-1; CPRF-2; CPRF-3;
Motifs on " " Strand: Mean Exp. Number 0.00358 Up.Conf.Int. 1 Found 1
422 CCACGTGGCa 431 (Mism.= 1)
TFBS AC: RSP00154//OS: parsley (Petroselinum crispum) /GENE: CHS/TFBS: ACE (CHS) /BF: bZIP factors CPRF1, CPRF4
Motifs on " " Strand: Mean Exp. Number 0.00358 Up.Conf.Int. 1 Found 1
422 CCACGTGGCa 431 (Mism.= 1)
Totally 50 motifs of 43 different TFBSs have been found
____________________________________________________________
QUERY: STBZIP17
Length of Query Sequence: 2000 bp | Nucleotide Frequencies: A - 0.37 G - 0.13 T - 0.39 C - 0.11
TFBS AC: RSP00577//OS: tomato (Lycopersicon esculentum), Lycopersicon esculentum /GENE: rbcS3A/TFBS: AT-rich FF2 /BF: unknown nuclear factor
Motifs on "-" Strand: Mean Exp. Number 0.00187 Up.Conf.Int. 1 Found 1
206 AATAATTAaAcATTAATTAA 187 (Mism.= 2)
TFBS AC: RSP00797//OS: potato (Solanum tuberosum) /GENE: patatin 21/TFBS: SURE-1 /BF: SURF
Motifs on "-" Strand: Mean Exp. Number 0.00440 Up.Conf.Int. 1 Found 1
1027 TAAAGAATAaAAAAAaaAA 1009 (Mism.= 3)
TFBS AC: RSP00864//OS: arabidopsis (Arabidopsis thaliana) /GENE: STK/TFBS: GA-5 /BF: BPC1
Motifs on "-" Strand: Mean Exp. Number 0.00260 Up.Conf.Int. 1 Found 1
1966 AGAGAGAGA 1958 (Mism.= 0)
Результат, который я хочу, выглядит следующим образом;
STBZIP38 RSP00073//OS
STBZIP38 RSP00153//OS
STBZIP38 RSP00154//OS
STBZIP17 RSP00577//OS
STBZIP17 RSP00797//OS
STBZIP17 RSP00864//OS
Я просматривал пару руководств и пытался использовать функцию разделения (я все еще изучаю A, B, C python). Я начал со следующего, что я все еще пытаюсь выяснить, — это как захватить только слово после термина, который я использую (например, ЗАПРОС: тогда берите только STBZIP38, затем число после TFBC AC:),.
Я очень признателен, если кто-нибудь сможет мне помочь в этом отношении. Заранее спасибо.
with open ('Softberry.txt') as fo:
for rec in fo:
print((rec.split('QUERY:')) ',' (rec.split('TFBS AC:')))
Комментарии:
1. Я настоятельно рекомендую вам изучить модуль python
re
. Доклад Эла Свейгарта на PyCon 2017 о регулярных выражениях в python — очень хорошее начало .2. Конечно, я так и сделаю. Спасибо!
Ответ №1:
Отличный шаблон для начала, я подготовил точные шаблоны регулярных выражений, сделайте все остальное. PS: что вам нужно, так это метод readlines() регулярное выражение, без разделения!
import re
s = """QUERY: STBZIP38
Length of Query Sequence: 2000 bp | Nucleotide Frequencies: A - 0.34 G - 0.16 T - 0.35 C - 0.15
TFBS AC: RSP00073//OS: tobacco (Nicotiana tabacum) /GENE: synthetic oligonucleotides/TFBS: PA /BF: TAF-1
Motifs on " " Strand: Mean Exp. Number 0.00391 Up.Conf.Int. 1 Found 1
421 tCCACGTGGC 430 (Mism.= 1)
Motifs on "-" Strand: Mean Exp. Number 0.00391 Up.Conf.Int. 1 Found 1
430 GCCACGTGGa 421 (Mism.= 1)
TFBS AC: RSP00153//OS: Parsley, Petroselinum crispum /GENE: CHS/TFBS: Box II /BF: CPRF-1; CPRF-2; CPRF-3;
Motifs on " " Strand: Mean Exp. Number 0.00358 Up.Conf.Int. 1 Found 1
422 CCACGTGGCa 431 (Mism.= 1)
TFBS AC: RSP00154//OS: parsley (Petroselinum crispum) /GENE: CHS/TFBS: ACE (CHS) /BF: bZIP factors CPRF1, CPRF4
Motifs on " " Strand: Mean Exp. Number 0.00358 Up.Conf.Int. 1 Found 1
422 CCACGTGGCa 431 (Mism.= 1)
Totally 50 motifs of 43 different TFBSs have been found
QUERY: STBZIP17
Length of Query Sequence: 2000 bp | Nucleotide Frequencies: A - 0.37 G - 0.13 T - 0.39 C - 0.11
TFBS AC: RSP00577//OS: tomato (Lycopersicon esculentum), Lycopersicon esculentum /GENE: rbcS3A/TFBS: AT-rich FF2 /BF: unknown nuclear factor
Motifs on "-" Strand: Mean Exp. Number 0.00187 Up.Conf.Int. 1 Found 1
206 AATAATTAaAcATTAATTAA 187 (Mism.= 2)
TFBS AC: RSP00797//OS: potato (Solanum tuberosum) /GENE: patatin 21/TFBS: SURE-1 /BF: SURF
Motifs on "-" Strand: Mean Exp. Number 0.00440 Up.Conf.Int. 1 Found 1
1027 TAAAGAATAaAAAAAaaAA 1009 (Mism.= 3)
TFBS AC: RSP00864//OS: arabidopsis (Arabidopsis thaliana) /GENE: STK/TFBS: GA-5 /BF: BPC1
Motifs on "-" Strand: Mean Exp. Number 0.00260 Up.Conf.Int. 1 Found 1
1966 AGAGAGAGA 1958 (Mism.= 0)"""
pat1='STB.*d*'
pat2 = 'RSP.*OS'
m = re.findall(pat1,s)
n = re.findall(pat2, s)
#print(m, n)
print(m[0], n[0])
print(m[0], n[1])
print(m[0], n[2])
print(m[1], n[3])
print(m[1], n[4])
print(m[1], n[5])
вывод
STBZIP38 RSP00073//OS
STBZIP38 RSP00153//OS
STBZIP38 RSP00154//OS
STBZIP17 RSP00577//OS
STBZIP17 RSP00797//OS
STBZIP17 RSP00864//OS
Комментарии:
1. Спасибо 🙂 . Раньше ненавидел кодирование (программирование в целом), но теперь сожалею об этой ошибке! быстрый вопрос; следующая часть — у меня почти 100 страниц (скопирована только половина входных данных). Каков наилучший способ сжать эту часть? ~~~ #print(m, n) print(m[0], n[0]) print(m[0], n[1]) print(m[0], n[2]) print(m[1], n[3]) print(m[1], n[4]) print(m[1], n[5]) ~~~
2. пожалуйста, найдите документ здесь: drive.google.com/file/d/16R__MlqfvKhF5cq5thi8FNZaouJi9K5u/… Спасибо!
3. Я пробовал много способов, но манипулировать им гораздо сложнее, чем я думал.. Хорошая новость в том, что я нашел очень простой способ выполнить эту работу 😁 с помощью регулярных выражений в notepad . Но я устал сейчас и собираюсь сделать это 2morrow. увидимся.
4. в основном вам придется делать это вручную, но это самое простое решение, которое я нашел, загрузите notepadd и используйте шаблон регулярных выражений, используемый для поиска совпадающих выражений, а затем вручную выровняйте их. В противном случае продвинутый программист может предложить вам подход к программированию. С уважением.
Ответ №2:
Хорошо, ребята. Вот как это закончилось. Большое спасибо за помощь, оказанную CYREX и xelf (Reddit).
with open('Softberry.txt') as f:
for line in f:
if line.startswith(' QUERY:'):
query = line.split(':', 1)[1].strip()
if 'AC:' in line:
ac = line.split('AC:')[1].split(':')[0].strip()
print(query,ac)