私のコードでは、ファイルをループしてファイル内のパターンをカウントします。python;出力をテキストファイルに書き込む方法
from collections import defaultdict
import csv, os, re
from itertools import groupby
import glob
def count_kmers(read, k):
counts = defaultdict(list)
num_kmers = len(read) - k + 1
for i in range(num_kmers):
kmer = read[i:i+k]
if kmer not in counts:
counts[kmer] = 0
counts[kmer] += 1
for item in counts:
return(basename, sequence, item, counts[item])
for fasta_file in glob.glob('*.fasta'):
basename = os.path.splitext(os.path.basename(fasta_file))[0]
with open(fasta_file) as f_fasta:
for k, g in groupby(f_fasta, lambda x: x.startswith('>')):
if k:
sequence = next(g).strip('>\n')
else:
d1 = list(''.join(line.strip() for line in g))
d2 = ''.join(d1)
complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}
reverse_complement = "".join(complement.get(base, base) for base in reversed(d1))
d3 = list(''.join(line.strip() for line in reverse_complement))
d4 = ''.join(d3)
d5 = (d2+d4)
counting = count_kmers(d5, 5)
with open('kmer.out', 'a') as text_file:
text_file.write(counting)
を次のように私のコードであり、私の出力は、この
1035 1 GAGGA 2
1035 1 CGCAT 1
1035 1 TCCCG 1
1035 1 CTCAT 2
1035 1 CCTGG 2
1035 1 GTCCA 1
1035 1 CATGG 1
1035 1 TAGCC 2
1035 1 GCTGC 7
1035 1 TGCAT 1
コードが正常に動作しますが、私は、ファイルへの私の出力を書き込むことができないように見えます。私は次のエラーを取得:
TypeError Traceback (most recent call last)
<ipython-input-190-89e3487da562> in <module>()
37 counting = count_kmers(d5, 5)
38 with open('kmer.out', 'w') as text_file:
---> 39 text_file.write(counting)
TypeError: write() argument must be str, not tuple
私が間違っているのは何を、どのように私は私のコードは、txtファイルに出力を書き込むことを確認するために、この問題を解決することができますか?
あなたは関数から何も返さず、画面に印刷するだけです。明示的な 'return'文がなければ、Python関数は' counting = count_kmers(d5、5) 'が行う' None'を返し、 '''" .join(None) 'しようとすると'そのエラー –
私のコードを変更しましたが(printの代わりにreturnを使用しました)、書き込み引数がstrで、タプルではないというエラーが表示されますか? – Gravel
デバッグするのにかなり簡単なエラーのようです... –