私はアクセッション番号と 16S rrna 配列のファイルを持っています。私がやろうとしているのは、RNA のすべての行を削除し、アクセッション番号と種名を含む行のみを保持することです (そしてその間のジャンクをすべて削除します)。したがって、私の入力ファイルは次のようになります (アクセッション番号の前に > があります):
> D50541 1 1409 1409bp rna Abiotrophia defectiva Aerococcaceae
CUGGCGGCGU GCCUAAUACA UGCAAGUCGA ACCGAAGCAU CUUCGGAUGC UUAGUGGCGA ACGGGUGAGU AACACGUAGA UAACCUACCC UAGACUCGAG GAUAACUCCG GGAAACUGGA GCUAAUACUG GAUAGGAUAU AGAGAUAUAUAUAGAGAUAUAUAU... など> AY538167 1 1411 1411bp rna アコレプラズマ ヒッピコン アコレプラズマ科
CUGGCGGCGU GCCUAAUACA UGCAAGUCGA ACGCCUUAUA GCAAUAUAGG GAGUGGCGAA CGGGUGAGUA ACACGUAGAU AACCUACCCU UACUUCGAGG AUAACUUCGG GAAACUGGAG CUAAUACUGG AUGUAGGAAUCAUA UUGAGGCAUUC UUAAU ...
出力を次のようにします。
>D50541 アビオトロフィア ディフェティバ アエロコッカス科
>AY538167 アコレプラズマ ヒッピコン アコレプラズマ科
私が書いたコードは、私が望むことを行います...ほとんどの行で。次のようになります。
#!/usr/bin/env python
# take LTPs111.compressed fasta and reduce to accession numbers with names.
import re
infilename = 'LTPs111.compressed.fasta'
outfilename = 'acs.fasta'
regex = re.compile(r'(>)\s(\w+).+[rna]\s+([A-Z].+)')
#remove extra letters and spaces
with open(infilename, 'r') as infile, open(outfilename, 'w') as outfile:
for line in infile:
x = regex.sub(r'\1\2 \3', line)
#remove rna sequences
for line in x:
if '>' in line:
outfile.write(x)
場合によっては、コードが一部の名前をスキップしているように見えることがあります。たとえば、上記の最初のアクセッション番号については、次の情報しか返されませんでした。
>D50541 アエロコッカス科
私のコードがこれを行っているのはなぜですか? 各アクセッション番号の入力は同じように見え、「rna」と名前の間のスペースは各行で同じです (5 スペース)。
アイデアがあるかもしれない人に感謝します!