fastaファイルからkmersを数えたいと思う。Python:fastaファイルからkmersをカウントする
import operator
seq = open('file', 'r')
kmers = {}
k = 5
for i in range(len(seq) - k + 1):
kmer = seq[i:i+k]
if kmer in kmers:
kmers[kmer] += 1
else:
kmers[kmer] = 1
for kmer, count in kmers.items():
print (kmer + "\t" + str(count))
sortedKmer = sorted(kmers.items(), key=itemgetter(1), reverse=True)
for item in sortedKmer:
print (item[0] + "\t" + str(item[1]))
これは1つの配列のみを持つファイルを正常に動作しますが、今、私はいくつかのコンティグとFASTAファイルを持っている:私は、次のスクリプトを持っています。 マイFASTAファイルは次のようになります。
>1
GTCTTCCGGCGAGCGGGCTTTTCACCCGCTTTATCGTTACTTATGTCAGCATTCGCACTT
CTGATACCTCCAGCAACCCTCACAGGCCACCTTCGCAGGCTTACAGAACGCTCCCCTACC
CAACAACGCATAAACGTCGCTGCCGCAGCTTCGGTGCATGGTTTAGCCCCGTTACATCTT
CCGCGCAGGCCGACTCGACCAGTGAGCTATTACGCTTTCTTTAAATGATGGCTGCTTCTA
AGCCAACATCCTGGCTGTCTGG
>2
AAAGAAAGCGTAATAGCTCACTGGTCGAGTCGGCCTGCGCGGAAGATGTAACGGGGCTAA
ACCATGCACCGAAGCTGCGGCAGCGACACTCAGGTGTTGTTGGGTAGGGGAGCGTTCTGT
AAGCCTGTGAAGGTGGCCTGTGAGGGTTGCTGGAGGTATCAGAAGTGCGAATGCTGACAT
AAGTAACGATAAAGCGGGTGAAAAGCCCGCTCGCCGGAAGACCAAGGGTTCCTGTCCAAC
GTTAATCGGGGCAGG
は、どのように私はそれが「> 1」の後の最初のシーケンスを取り、出力は、「> 2」に行くことを印刷する、などその出力を印刷することを、スクリプトを変更できますか?
それはありFASTAファイルを読むためのライブラリが存在します。 Google:http://biopython.org/wiki/SeqIO – Benjamin
[FASTAファイル形式](http://bioperl.org/formats/sequence_formats/FASTA_sequence_format)によると、「>後の記述行は完全に自由形式です」 、汎用ソリューションを提供するのが難しいです。基本的なpythonic方法は正規表現を使用することです。 re.split( '> \ d'、s) –