2016-12-10 4 views
-1

У меня есть файл, как этот маленький пример:разбора странный файл в текстовый файл

небольшой пример:

>ENSG00000003249|ENST00000002501|DBNDD1|2079 
GCCGCGGCCCCCCGGTTGCTGCCCCGATGCGCTGCGCCCGGAGCCGGGGCCGAGTCGCTG 
CCGCAGCTGTTGGGGCGCCCGGGCCAGGCGACGCCGCCGTCGCCCGTGCCCCTCCCAGAC 
CGCACCGGCCGC 
>ENSG00000048028|ENST00000003302|USP28|4669 
AGTCCTGAGAGGCTGGGCCGGCGGCGGCTGCGGCGGGAGACCGGTGACCCGCGGCTGGGC 
GCCTCGGCC 

первая линия, которая начинается с ">" имеет 4-х частей, разделенных "|" а следующая строка - последовательность символов, связанных с линией, начинающейся с ">". Я хочу проанализировать этот файл в текстовый файл, в котором есть 5 столбцов. первые 4 столбца будут в первой строке, начинающейся с ">", а пятая строка - это последовательность. , например, враг последней последовательности результатов будет выглядеть так:

ENSG00000048028 ENST00000003302 USP28 4669 AGTCCTGAGAGGCTGGGCCGGCGGCGGCTGCGGCGGGAGACCGGTGACCCGCGGCTGGGCGCCTCGGCC 

Я сделал этот код, но не получилось:

list = [] 
with open(inputfile) as f: 
    for line in f: 
     if line.startswith('>'): 
      parts = line.split('|') 
     else: 
      parts = sequence 
     list.append(parts) 

infile = open('test.txt', 'w') 
for item in list: 
    infile.write("%s\n" % item) 
+2

Это [формат FASTA] (http://bioperl.org/formats/ sequence_formats/FASTA_sequence_format), содержащий информацию о ДНК. Вы можете использовать ['BioPy.SeqIO()'] (http://biopython.org/wiki/SeqIO), или вы можете разобрать его вручную. –

+0

Мне любопытно, почему вы хотите конвертировать один текстовый формат в другой. Вы пытаетесь передать эти данные в другую программу, которую вы не пишете? – qxz

+0

, поэтому вы хотите переформатировать вышеприведенный текст в две строки подстрок, разделенных пробелом? – RomanPerekhrest

ответ

1

Это FASTA file format. Если вы хотите вручную проанализировать это, сохраните строку заголовка для последующего использования. Обратите внимание, что последовательность может быть разбита на несколько строк; выпишите свои комбинированные столбцы только тогда, когда вы достигнете конца или достигнете нового заголовка.

Я бы использовать csv модуль написать вывод:

import csv 

with open(inputfile) as f, open('test.txt', 'w') as outfile: 
    header = sequence = None 
    out = csv.writer(outfile, delimiter='|') 
    for line in f: 
     if line.startswith('>'): # header 
      # write out previous data 
      if header: 
       entry = header + [''.join(sequence)] 
       out.writerow(entry) 
      header = line.strip('>\n').split('|') 
      sequence = [] 
     else: 
      sequence.append(line.strip()) 

    if header: 
     entry = header + [''.join(sequence)] 
     out.writerow(entry) 

Демо:

>>> from io import StringIO 
>>> import csv 
>>> demoinput = StringIO('''\ 
... >ENSG00000003249|ENST00000002501|DBNDD1|2079 
... GCCGCGGCCCCCCGGTTGCTGCCCCGATGCGCTGCGCCCGGAGCCGGGGCCGAGTCGCTG 
... CCGCAGCTGTTGGGGCGCCCGGGCCAGGCGACGCCGCCGTCGCCCGTGCCCCTCCCAGAC 
... CGCACCGGCCGC 
... >ENSG00000048028|ENST00000003302|USP28|4669 
... AGTCCTGAGAGGCTGGGCCGGCGGCGGCTGCGGCGGGAGACCGGTGACCCGCGGCTGGGC 
... GCCTCGGCC 
... ''') 
>>> outfile = StringIO() 
>>> f = demoinput 
>>> header = sequence = None 
>>> out = csv.writer(outfile, delimiter='|') 
>>> for line in f: 
...  if line.startswith('>'): # header 
...   # write out previous data 
...   if header: 
...    entry = header + [''.join(sequence)] 
...    out.writerow(entry) 
...   header = line.strip('>\n').split('|') 
...   sequence = [] 
...  else: 
...   sequence.append(line.strip()) 
... 
178 
>>> if header: 
...  entry = header + [''.join(sequence)] 
...  out.writerow(entry) 
... 
114 
>>> print(outfile.getvalue()) 
ENSG00000003249|ENST00000002501|DBNDD1|2079|GCCGCGGCCCCCCGGTTGCTGCCCCGATGCGCTGCGCCCGGAGCCGGGGCCGAGTCGCTGCCGCAGCTGTTGGGGCGCCCGGGCCAGGCGACGCCGCCGTCGCCCGTGCCCCTCCCAGACCGCACCGGCCGC 
ENSG00000048028|ENST00000003302|USP28|4669|AGTCCTGAGAGGCTGGGCCGGCGGCGGCTGCGGCGGGAGACCGGTGACCCGCGGCTGGGCGCCTCGGCC 
+0

я не знаю, если вы пробовали это или нет, но выход, как это: ENSG00000003249 | ENST00000002501 | DBNDD1 | 2079 | "GCCGCGGCCCCCCGGTTGCTGCCCCGATGCGCTGCGCCCGGAGCCGGGGCCGAGTCGCTG "|" CCGCAGCTGTTGGGGCGCCCGGGCCAGGCGACGCCGCCGTCGCCCGTGCCCCTCCCAGAC "|" CCGCAGCTGTTGGGGCGCCCGGGCCAGGCGACGCCGCCGTCGCCCGTGCCCCTCCCAGAC CGCACCGGCCGC " – bzmby

+0

@bzmby: Я думаю, последовательности нужно удалить, я подозреваю, что там есть новые строки. Я добавил это сейчас. –

+0

что приятно. но все же у меня есть только одна колонка. и разделение - «|». Я хочу иметь 5 столбцов – bzmby

Смежные вопросы