私は非常にPythonに新しく、いくつかの問題を抱えています。答えが見つからないようです。 私は大きなファイルを読み込み、次に特定の情報を分割して書き出しようとしています。私は読み込みと分割に問題があり、同じことを何度も何度も何度も印刷しているだけです。ファイルを読み込み、分割してから希望の出力を書き出します。
blast_output = open("blast.txt").read()
for line in blast_output:
subFields = [item.split('|') for item in blast_output.split()]
print(str(subFields[0][0]) + "\t" + str(subFields[0][1]) + "\t" + str(subFields[1][3]) + "\t" + str(subFields[2][0]))
私の入力ファイルは次のようになり、多くの行があります:私は受け付けており、出力はこれです
c0_g1_i1|m.1 gi|74665200|sp|Q9HGP0.1|PVG4_SCHPO 100.00 372 0 0 1 372 1 372 0.0 754
c1002_g1_i1|m.801 gi|1723464|sp|Q10302.1|YD49_SCHPO 100.00 646 0 0 1 646 1 646 0.0 1310
c1003_g1_i1|m.803 gi|74631197|sp|Q6BDR8.1|NSE4_SCHPO 100.00 246 0 0 1 246 1 246 1e-179 502
c1004_g1_i1|m.804 gi|74676184|sp|O94325.1|PEX5_SCHPO 100.00 598 0 0 1 598 1 598 0.0 1227
を:
c0_g1_i1 m.1 Q9HGP0.1 100.00
c0_g1_i1 m.1 Q9HGP0.1 100.00
c0_g1_i1 m.1 Q9HGP0.1 100.00
c0_g1_i1 m.1 Q9HGP0.1 100.00
しかし、私は望んでいますと、
c0_g1_i1 m.1 Q9HGP0.1 100.0
c1002_g1_i1 m.801 Q10302.1 100.0
c1003_g1_i1 m.803 Q6BDR8.1 100.0
c1004_g1_i1 m.804 O94325.1 100.0
です
あなたは3行目にline.split()を使用する必要があります。 – giliev
'blast_output'は文字列です。文字列を反復処理すると、行ではなく文字になります。最初に '.read()'を削除して、ファイルの行を繰り返し処理します。 –
あなたのリストの理解を広げ、すべてのフィールドを変数に割り当ててみてください*。次に、個々の変数(おそらくprintステートメントで)を調べて、何が起こっているかを見ることができます。 – wwii