2017-03-13 25 views
6

Nowość w kodowaniu. Nowość w Pytho/biopython; to jest moje pierwsze pytanie online, nigdy. Jak otworzyć skompresowany plik fasta.gz, aby wyodrębnić informacje i wykonać obliczenia w mojej funkcji. Oto uproszczony przykład tego, co próbuję zrobić (próbowałem na różne sposoby) i jaki jest błąd. Polecenie gzip, którego używam, nie działa.SeqIO.parse na fasta.gz

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 
+0

Miałem podobne błędy, gdy przypadkowo sparsowałem plik fastq w niewłaściwym formacie. Jeśli rozpakujesz plik fasta i pobierzesz go krótko za pomocą edytora tekstu, nie widzisz niczego niezwykłego? –

+0

Dziękujemy! Hunch był poprawny. – MelBel88

Odpowiedz

8

Czy używasz python3?

To ("r" -> "rt") może rozwiązać twój problem.

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) 
+0

Dziękujemy! Masz to! Myślałem, że próbowałem wszystkiego, ale zamieniłem polecenia w połowie. Nie czuję się już sam w świecie programowania! – MelBel88