Как вы извлекаете текст из последовательных строк и делаете столбцы с разделителями табуляции в python?

Я новичок в Python и хотел посмотреть, как это работает на Python.

У меня есть эти данные ниже, называемые data.txt, я хочу получить четыре столбца из этих данных. Сначала я хочу получить категорию деградации, затем значение p, затем текст до и после Query:. Результат должен выглядеть так:

Degardome Category: 4    Degradome p-value: 0.00120246641531374  3' AUUAAUAACCGGCCUGUUUGC 5'   Seq_1950_218
Degardome Category: 4    Degradome p-value: 0.00360306320817827  3' ACUUUCUUUUCUUAA--UCUUUC 5'  Seq_2171_593 

data.txt:

Degardome Category: 4
Degradome p-value: 0.00120246641531374
T-Plot file: T-plots-IGR/Seq_5744_249_Supercontig_2.10_1257006_264_TPlot.pdf

Position    Reads   Category
264 1   4   <<<<<<<<<<
914 1   4
987 4   0
---------------------------------------------------
---------------------------------------------------

5' UUGGAGGUGGCUGGACGGAUG 3' Transcript: Supercontig_2.10_1395094:908-928 Slice Site:919
          ||||o||||oo|o|
3' AUUAAUAACCGGCCUGUUUGC 5' Query: Seq_1950_218
HV2.fasta_dd.txt
Degardome Category: 4
Degradome p-value: 0.00360306320817827
T-Plot file: T-plots-IGR/Seq_1950_218_Supercontig_2.10_1395094_919_TPlot.pdf

Position    Reads   Category
919 1   4   <<<<<<<<<<
---------------------------------------------------
---------------------------------------------------

5' AGAAGGGGAAGAGUGGAGGAGAG 3' Transcript: Supercontig_2.10_1543625:626-648 Slice Site:637
    |||o|oo||||o|   o||o||
3' ACUUUCUUUUCUUAA--UCUUUC 5' Query: Seq_2171_593

что ты уже испробовал?

Kevin Fang 26.10.2018 08:52
0
1
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы прочитаете весь файл, используя

 with open('file.txt', 'r') as f:
     a = f.read()
 a = a.split('\n')

даст следующий результат:

['Degardome Category: 4',
 'Degradome p-value: 0.00120246641531374',
 'T-Plot file: T-plots IGR/Seq_5744_249_Supercontig_2.10_1257006_264_TPlot.pdf',
 '',
 'Position    Reads   Category',
 '264 1   4   <<<<<<<<<<',
 '914 1   4',
 '987 4   0',
 '---------------------------------------------------',
 '---------------------------------------------------',
 '',
 "5' UUGGAGGUGGCUGGACGGAUG 3' Transcript: Supercontig_2.10_1395094:908-928 Slice Site:919",
 '          ||||o||||oo|o|',
 "3' AUUAAUAACCGGCCUGUUUGC 5' Query: Seq_1950_218",
 'HV2.fasta_dd.txt',
 'Degardome Category: 4',
 'Degradome p-value: 0.00360306320817827',
 'T-Plot file: T-plots-IGR/Seq_1950_218_Supercontig_2.10_1395094_919_TPlot.pdf',
 '',
 'Position    Reads   Category',
 '919 1   4   <<<<<<<<<<',
 '---------------------------------------------------',
 '---------------------------------------------------',
 '',
 "5' AGAAGGGGAAGAGUGGAGGAGAG 3' Transcript: Supercontig_2.10_1543625:626-648 Slice Site:637",
 '    |||o|oo||||o|   o||o||',
 "3' ACUUUCUUUUCUUAA--UCUUUC 5' Query: Seq_2171_593"]

Теперь инициализируйте пустую строку и объедините всю соответствующую часть:

In [4]: t = ''
In [5]: for line in a:
...:     if 'Degardome Category:' in line:
...:         t += line + ' '
...:     if 'Degradome p-value:' in line:
...:         t += line + ' '
...:     if 'Query' in line:
...:         t += line.replace('Query:', '') + '\n'

Наконец, разделите строку на новую строку:

In [6]: out = [i for i in t.split('\n') if i]

In [7]: out
Out[7]:
["Degardome Category: 4 Degradome p-value: 0.00120246641531374 3' 
 AUUAAUAACCGGCCUGUUUGC 5'  Seq_1950_218",
 "Degardome Category: 4 Degradome p-value: 0.00360306320817827 3' 
 ACUUUCUUUUCUUAA--UCUUUC 5'  Seq_2171_593"]
Ответ принят как подходящий

Решение с использованием модуля re:

pattern1 = re.compile(r'Degardome Category')
pattern2 = re.compile(r'Degradome p-value')
pattern3 = re.compile(r'Query')

l1 = []
l2 = []
l3 = []

with open('/home/mayankp/data.txt') as f:
    for i in f:
        if pattern1.search(i):
            a = re.sub('\n','',i)
            l1.append(a)
        elif pattern2.search(i):
            a = re.sub('\n','',i)
            l2.append(a)
        elif pattern3.search(i):
            a = re.sub('Query:','',i)
            b = re.sub('\n','',a)
            l3.append(b)

In [1244]: output = zip(l1,l2,l3)

In [1245]: output
Out[1245]: 
[('Degardome Category: 4',
  'Degradome p-value: 0.00120246641531374',
  "3' AUUAAUAACCGGCCUGUUUGC 5'  Seq_1950_218"),
 ('Degardome Category: 4',
  'Degradome p-value: 0.00360306320817827',
  "3' ACUUUCUUUUCUUAA--UCUUUC 5'  Seq_2171_593")]

теперь вы можете записать этот output в файл.

Другие вопросы по теме