2014-09-24 68 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()和正則表達式和strip()/ lstrip()/ rstrip()。 – DBedrenko 2014-09-24 13:46:14

回答

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的或任何將其更改爲文件的文件,否則異常和諸如此類的東西。

相關問題