1

ファイル:

>1
ATTTTttttGGGG
ccCgCgGAgggGGT
gggggttttTTTTTTTTT
>2
ATcggGGGGGGA
>3
ATCGGGGGGATTT
gggggttAGTAttt

この形式のファイルを読み取る関数を作成しています。この形式には、'>'+名前で区切られた複数のファイルが埋め込まれています (例: '>1','>2')

「>」行に挟まれたテキスト行を取得して、セクションごとに1つの文字列にコンパイルしようとしています

これは次のようになります

name_list = ['>1','>2','>3']
sequence_list = ['ATTTTttttGGGGccCgCgGAgggGGTgggggttttTTTTTTTTT','ATcggGGGGGGA','ATCGGGGGGATTTgggggttAGTAttt']

import os
import re

# Open File

in_file=open(FASTA,'r')
dir,file=os.path.split(FASTA)
temp = os.path.join(dir,output)
out_file=open(temp,'w')

# Generating lines

lines = []
name_list = []
seq_list = []

for line in in_file:
    line = line.strip()
    lines.append(line)

in_file.close()

indx = range(0,len(lines))

# Organizing the elements
for line in lines:
    for i in line:
        if i == '>':
            name_list.append(line)
        else:
            break

else: ステートメントで何をすべきかわからない次の「>」を見つけて、それらを seq_list というリストに追加します

どんな助けでも大歓迎です

4

2 に答える 2

2

パーサーを備えたBiopythonを確認する必要がありますFASTAが、標準のlibを使用した例を次に示します。

import re
with open('filename') as f:
    print [i.replace('\n','') for i in re.split(r'\>\d+',f.read()) if i]

アウト:

['ATTTTttttGGGGccCgCgGAgggGGTgggggttttTTTTTTTTT',
 'ATcggGGGGGGA',
 'ATCGGGGGGATTTgggggttAGTAttt']

Biopython[ sudo pip install biopython]の使用:

from Bio import SeqIO
with open("example.fasta", "rU") as handle:
    print list(SeqIO.parse(handle, "fasta"))

アウト:

[SeqRecord(seq=Seq('ATTTTttttGGGGccCgCgGAgggGGTgggggttttTTTTTTTTT', SingleLetterAlphabet()), id='1', name='1', description='1', dbxrefs=[]), 
 SeqRecord(seq=Seq('ATcggGGGGGGA', SingleLetterAlphabet()), id='2', name='2', description='2', dbxrefs=[]),
 SeqRecord(seq=Seq('ATCGGGGGGATTTgggggttAGTAttt', SingleLetterAlphabet()), id='3', name='3', description='3', dbxrefs=[])]
于 2013-02-12T20:48:15.237 に答える
1

辞書は人生を楽にしてくれます:

>>> d = {}
>>> with open('t.txt') as f:
...   for line in f:
...      if line.startswith('>'):
...         key = line.strip()
...         if key not in d:
...             d[key] = []
...      else:
...         d[key].append(line.strip())
... 
>>> d
{'>1': ['ATTTTttttGGGG', 'ccCgCgGAgggGGT', 'gggggttttTTTTTTTTT'],
 '>2': ['ATcggGGGGGGA'], '>3': ['ATCGGGGGGATTT', 'gggggttAGTAttt']}
>>> sequence_list = [''.join(k) for k in d.values()]
>>> sequence_list
['ATTTTttttGGGGccCgCgGAgggGGTgggggttttTTTTTTTTT',
 'ATcggGGGGGGA', 'ATCGGGGGGATTTgggggttAGTAttt']
于 2013-02-12T20:51:18.327 に答える