2014-09-24 4 views
-2

Я только начал использовать эту новую программу, которая выводит в нечетном формате, как показано ниже:Как выбрать конкретную информацию из файла? Python

CRISPR 10 Range: 7784249 - 7784543 
POSITION REPEAT    SPACER 
-------- -------------------------------- --------------------------------- 
7784249  GTTTCAATCCACGCCCCCGCATGGGGGGCGAC GTTAAGATTTTCAGCCGAAGCATAAGACTGCTCA [ 32, 34 ] 
7784315  GTTTCAATCCACGCCCCCGCATGGGGGGCGAC ATCAATAACAATACCTTGCTTTTCAGTTTCATT [ 32, 33 ] 
7784380  GTTTCAATCCACGCCCCCGCATGGGGGGCGAC TATAACTTTCTCCTTCTATTGTTGATGTAACATA [ 32, 34 ] 
7784446  GTTTCAATCCACGCCCCCGCATGGGGGGCGAC TTTTCATTTGCATCAAGTTCTTTTTCAAGGTCAA [ 32, 34 ] 
7784512  GTTTCAATCCACGCCCCCG>CONTIG-97480  
-------- -------------------------------- --------------------------------- 
Repeats: 5 Average Length: 32  Average Length: 33 



CRISPR 11 Range: 8822044 - 8822520 
POSITION REPEAT    SPACER 
-------- ------------------------------------- ------------------------------------ 
8822044  GTGTCAATGCCCTATATCGGGCGCACTTCATTTCTAC TTTACCAATCTCGGCTCTTTACTCCCGCTGGGTGCATT [ 37, 38 ] 
8822119  GTGTCAATGCCCTATATCGGGCGCACTTCATTTCTAC TTAAAGCAGATACAAAGAAGCCTTGTGAGGAATATT [ 37, 36 ] 
8822192  GTGTCAATGCCCTATATCGGGCGCACTTCATTTCTAC TATACTTCAGAAGTGCTGAGTTCCAGAAGCTTTTT [ 37, 35 ] 
8822264  GTGTCAATGCCCTATATCGGGCGCACTTCATTTCTAC AAATATATGATTAATAATAAGAATAATCAAATAGTA [ 37, 36 ] 
8822337  GTGTCAATGCCCTATATCGGGCGCACTTCATTTCTAC TTTCGTGGTTCCATCTGCTTATGAAACATTATTGATCT [ 37, 38 ] 
8822412  GTGTCAATGCCCTATATCGGGCGCACTTCATTTCTAC GGATGAGGCTGGTACATATACGTACCTGGTTCTTC [ 37, 35 ] 
8822484  GTGTCAATGCCCTATATCGGGCGCACTTCAT>CONTI 
-------- ------------------------------------- ------------------------------------ 
Repeats: 7 Average Length: 37  Average Length: 36 

мне было интересно, как я хотел бы идти о выборе только строк третьего столбца и вывести их в новый файл. Я также хочу, чтобы дать каждую часть названия, а также для следующей программы так, например, выход на первой линии «CRISPR 11»:

>CRISPR_11_8822044_8822520_1 
TTTACCAATCTCGGCTCTTTACTCCCGCTGGGTGCATT 

Таким образом, название производится до «>», то номер CRISPR, тогда значения диапазона и конечное число находятся там, где они находятся в порядке, например его 1, поскольку он является первым в этом множестве.

Я знаю, как писать в файл, но не знаю, как выбрать относительные части файла.

Любая помощь будет отличной.

+1

Используйте str.split() и regex и strip()/lstrip()/rstrip(). – DBedrenko

ответ

0

Ответ, как комментарий NewWorld, представляет собой всего лишь кучу регулярных выражений, разделов и разбора списков. Хотя я уверен, что есть намного более сжатые и более четкие способы сделать это, я бы сделал это на вашем месте.

Этот код проходит через входной файл построчно,

  • Если линия начинается буква «C», или это конец файла, некоторые строки из строки выбраны для присвоения имени
  • Если строка начинается с числа, выбирает вторую строку в этой строке, которая содержит A/T/G/C не менее 5 раз. Вы можете изменить это регулярное выражение, если вы не хотите, чтобы выбрать строки, оканчивающиеся CONTI

Я сохранил свой текст в файл example.txt и побежал это.

import re 

secondbases = [] 
with open('/example.txt','r') as contents: 
    for line in contents: 
     splitline = line.split() 
     if line[0] == 'C': #If line begins CRISPR, write new info to file and save new CRISP values 
      if secondbases != []: 
       outputfile = open('/output.txt','a') #With ain't workin for me here, but replace at your own desire 
       x = 1 
       for base in secondbases: 
        outputfile.write('>CRISPR_' + crispno + '_' + rangestart + '_' + rangeend + '_' + str(x) + ' ' + base + '\n') 
        x += 1 
       outputfile.close() 
      secondbases = [] 
      (crispno,rangestart,rangeend) = (splitline[1],splitline[3],splitline[5]) 
     elif re.search('[0-9]',line[0]): #If base lines, copy second base string to list 
      bases = [] 
      for a in splitline: 
       if re.search('[GTCA]{5,}',a): 
        bases = bases + [a] 
      if len(bases) > 1: 
       secondbases = secondbases + [bases[1]] 
     elif line[len(line)-1] != '\n' and secondbases != []: 
      outputfile = open('/output.txt','a') 
      x = 1 
      for base in secondbases: 
       outputfile.write('>CRISPR_' + crispno + '_' + rangestart + '_' + rangeend + '_' + str(x) + ' ' + base + '\n') 
       x += 1 
      outputfile.close() 

Какой выводимый файл, содержащий

>CRISPR_10_7784249_7784543_1 GTTAAGATTTTCAGCCGAAGCATAAGACTGCTCA 
>CRISPR_10_7784249_7784543_2 ATCAATAACAATACCTTGCTTTTCAGTTTCATT 
>CRISPR_10_7784249_7784543_3 TATAACTTTCTCCTTCTATTGTTGATGTAACATA 
>CRISPR_10_7784249_7784543_4 TTTTCATTTGCATCAAGTTCTTTTTCAAGGTCAA 
>CRISPR_11_8822044_8822520_1 TTTACCAATCTCGGCTCTTTACTCCCGCTGGGTGCATT 
>CRISPR_11_8822044_8822520_2 TTAAAGCAGATACAAAGAAGCCTTGTGAGGAATATT 
>CRISPR_11_8822044_8822520_3 TATACTTCAGAAGTGCTGAGTTCCAGAAGCTTTTT 
>CRISPR_11_8822044_8822520_4 AAATATATGATTAATAATAAGAATAATCAAATAGTA 
>CRISPR_11_8822044_8822520_5 TTTCGTGGTTCCATCTGCTTATGAAACATTATTGATCT 
>CRISPR_11_8822044_8822520_6 GGATGAGGCTGGTACATATACGTACCTGGTTCTTC 

Просто убедитесь, что есть файл с именем output.txt или что-то изменить его, в противном случае исключения и этажерки.

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