コーディングは初めてです。 Pytho/biopythonの新機能。これは私のオンラインでの最初の質問です。圧縮されたfasta.gzファイルを開いて情報を抽出し、関数で計算を実行するにはどうすればよいですか。これは、私がやろうとしていること(さまざまな方法を試しました)とエラーの簡単な例です。使用しているgzipコマンドが機能しないようです。
with gzip.open("practicezip.fasta.gz", "r") as handle:
for record in SeqIO.parse(handle, "fasta"):
print(record.id)
Traceback (most recent call last):
File "<ipython-input-192-a94ad3309a16>", line 2, in <module>
for record in SeqIO.parse(handle, "fasta"):
File "C:\Users\Anaconda3\lib\site-packages\Bio\SeqIO\__init__.py", line 600, in parse
for r in i:
File "C:\Users\Anaconda3\lib\site-packages\Bio\SeqIO\FastaIO.py", line 122, in FastaIterator
for title, sequence in SimpleFastaParser(handle):
File "C:\Users\Anaconda3\lib\site-packages\Bio\SeqIO\FastaIO.py", line 46, in SimpleFastaParser
if line[0] == ">":
IndexError: index out of range
Python3を使用していますか?
これ( "r"-> "rt")で問題を解決できます。
import gzip
from Bio import SeqIO
with gzip.open("practicezip.fasta.gz", "rt") as handle:
for record in SeqIO.parse(handle, "fasta"):
print(record.id)
通常のテキストとgzip圧縮されたファイルの両方を処理する場合の解決策は次のとおりです。
import gzip
from mimetypes import guess_type
from functools import partial
from Bio import SeqIO
input_file = 'input_file.fa.gz'
encoding = guess_type(input_file)[1] # uses file extension
_open = partial(gzip.open, mode='rt') if encoding == 'gzip' else open
with _open(input_file) as f:
for record in SeqIO.parse(f, 'fasta'):
print(record)
注:これは、正しいファイル拡張子を持つファイルに依存します。これは、ほぼ常に妥当であると思います(この仮定が満たされない場合、エラーは明白で明白です)。ただし、この仮定に依存するのではなく、ファイルの内容を実際にチェックする方法については、 ここを読んでください 。