如何从文件中选择特定的信息? Python的

如何从文件中选择特定的信息? Python的

问题描述:

我刚开始使用这个新的计划,如下图所示,其在一个奇怪的格式输出:如何从文件中选择特定的信息? 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()和正则表达式和strip()/ lstrip()/ rstrip()。 – DBedrenko 2014-09-24 13:46:14

答案与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的或任何将其更改为文件的文件,否则异常和诸如此类的东西。