2017-07-05 7 views
0

をコンパイルします。三つのファイル持っている別のファイルにする場合には

#!/usr/bin/env python 
from Bio import SeqIO 
filenames = ["file1","file2","file3"] 
ids = [] 

for record in filenames: 
    f = SeqIO.parse(record, 'fasta') 
    ids.append(f.id) 

print ids 

、出力はこれです:私は、ディレクトリ内のすべてのシーケンスの名前を抽出するために、このコードを書いた

File1 
    >TAIR:175_a 
    ALSKDJFLKAHGLKASJDFLAKJSDLKGHALKSDHGALKALKSJDF 
    >TAIR:175_b 
    ZZZLAALSKDJFALKSDJFL;KJEIURALKDJFNVALKSDJFKZZZ 
    >TAIR:175_c 
    ALSKDJFLKAHGLKASJDFLAKJSDLKGHALKSDHGALKALKSJDF 

File2 
    >TAIR:674_a 
    ASLALKSDGHLA;KSJDFIEURALKSDHGLANVALKSDJGHKLJA 
    >TAIR:674_b 
    ASLALKSDGHDJGDGSDDFIEURALKSDHGLANVALKSDJGHKLJA 

File3 
    >TAIR:812_a 
    KLJALSKDHGLAKSDHJFIEUROWASDLKGNIEASDFJKWERLJKJ 
    >TAIR:812_c 
    ASLALKSDGHLA;KSJDFIEURALKSDHGLANVALKSDJGHKLJA 

File4 
    >TAIR:975_b 
    KLJALSKDHGLAKSDHJFIEUROWASDLKGNIEASDFJKWERLJKJ 

File5 
    >TAIR:444_b 
    QQALKSDJFWOIAOQIWUERTOIUQTOIUOQIWEURLASKDJFA 
    >TAIR:444_c 
    QQALKSDJFWOIAOQIWUERTOIUQTOIUOQIWEURLASKDJFA 

python search_list.py 
[<generator object parse at 0x7f32836018c0>, <generator object parse at 0x7f3283601910>, <generator object parse at 0x7f3283601960>] 

そして、私は期待出力は次のようになります。

file_a 
    >TAIR:175_a 
    ALSKDJFLKAHGLKASJDFLAKJSDLKGHALKSDHGALKALKSJDF 
    >TAIR:674_a 
    ASLALKSDGHLA;KSJDFIEURALKSDHGLANVALKSDJGHKLJA 

file_b 
    >TAIR:175_b 
    ZZZLAALSKDJFALKSDJFL;KJEIURALKDJFNVALKSDJFKZZZ 
    >TAIR:674_b 
    ASLALKSDGHDJGDGSDDFIEURALKSDHGLANVALKSDJGHKLJA 
    >TAIR:975_b 
    KLJALSKDHGLAKSDHJFIEUROWASDLKGNIEASDFJKWERLJKJ 
    >TAIR:444_b 
    QQALKSDJFWOIAOQIWUERTOIUQTOIUOQIWEURLASKDJFA 

file_c 
    >TAIR:175_c 
    ALSKDJFLKAHGLKASJDFLAKJSDLKGHALKSDHGALKALKSJDF 
    >TAIR:812_c 
    ASLALKSDGHLA;KSJDFIEURALKSDHGLANVALKSDJGHKLJA 
    >TAIR:444_c 
    QQALKSDJFWOIAOQIWUERTOIUQTOIUOQIWEURLASKDJFA 

リスト "ids"のファイルを開いてコンパイルすると、これを解決するための提案はありますか?

+1

は 'F =リスト(SeqIO.parseを使用してみてくださいレコード、 'fasta') '、少なくともそれはあなたがジェネレータを持っているとは印刷されませんが、 –

答えて

2

(印刷括弧の問題を無視して、()はPython 3.6.0; Biopython 1.69)私のシステムであなたのコードブレークと:

AttributeError: 'generator' object has no attribute 'id' 

SeqIO.parse()として戻って発電機。また、私の期待する出力は完全に間違っています。

['TAIR:175_a', 'TAIR:674_a', 'TAIR:812_a', 'TAIR:975_b', 'TAIR:175_b', 'TAIR:444_b', 'TAIR:175_c', 'TAIR:444_c'] 

そして、私の環境では、次のコードは、あなたのためにそれを取得します:あなたが期待している何、このコード与えられた、ある(

from Bio import SeqIO 

filenames = ["file1.fasta", "file2.fasta", "file3.fasta"] 

ids = [] 

for filename in filenames: 
    records = SeqIO.parse(filename, 'fasta') 

    for record in records: 
     ids.append(record.id) 

print(ids) 
0

あなたは、オブジェクトを印刷するようにPythonに依頼しているので、その出力が得られます。そのため、コンテンツの代わりにデフォルトでメモリアドレスが表示されているだけです。 標準的なpythonのオープンメソッドを使用するほうが良いでしょう(調べたいファイルのリストを反復する)。ファイル内の各行を繰り返して、リストや好きなものに追加することができます。例が役立つかどうか教えてください。

関連する問題