2016-12-08 8 views
1

私のツールのすべてのモジュールをPython 2からPython 3に移行しました。私は解決できなかった問題にぶつかります - gzipped fastaファイルへの書き込み方法はわかりません。pythonでgzipされたfastaファイルに書き込む

with gzip.open("sample.fasta.gz", "w") as file: 
    print("writing...") 
    for oid, seq in temp_data.items(): 
     # prepare row 
     row = SeqRecord(Seq(seq), id=str(oid), description=temp_tax[oid]) 
     SeqIO.write(row, file, "fasta") 

このコードは、Python 2で動作しますが、それは、Python 3では動作しません、それが発生します

TypeError: memoryview: a bytes-like object is required, not 'str'

を、私は問題を修正する必要がありますどのように?

答えて

2

普通のopen関数とは異なり、gzip.open functionは、テキストモードではなくバイナリモードにデフォルト設定されています。あなたが明示的にテキストモードで開くには、モード文字列の一部としてtを渡す必要が(受け入れ/ strを期待):

with gzip.open("sample.fasta.gz", "wt") as file: 

はあなたにも(空文字列)pass newline=''にしたいことがあり、変換を終了する行を避けるためにそのため、Windowsのようなシステムでは、書き込み時に\n\r\nに変換しません。

+0

私は 't'オプションを完全に忘れていました。ありがとう! – thecoparyew

0

SeqRecordから返される文字列をbytesオブジェクトに変換してみてください。

byte_row = record.format('').encode() 

record.format('')stringとしてレコードを返します。

.encode()は、stringbyteオブジェクトに変換します。

関連する問題