Как вы можете проанализировать fna.gz в Python? - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу вернуть n-ю базовую пару, учитывая мой ввод в геном fna.gz. Теоретически это будет работать так:

allele = genome[14325]
print(allele)
#: G

Это код, который у меня сейчас есть:

from Bio import SeqIO
import gzip
from Bio.Alphabet import generic_dna

input_file = r"C:\Users\blake\PycharmProjects\Transcendence3.0\DNA\GCF_000001405.38_GRCh38.p12_genomic.fna.gz"
output_file = r"C:\Users\blake\PycharmProjects\Transcendence3.0\DNA\Probabilities"

with gzip.open(input_file, "rt") as handle:
    for record in SeqIO.parse(input_file, "fasta", generic_dna):
        fasta_sequences = SeqIO.parse(open(input_file), 'fasta')
        print("seq parsed")
        with open(output_file) as out_file:
            for fasta in fasta_sequences:
                name, sequence = fasta.id, str(fasta.seq)
                new_allele = tell_basepair(sequence)
                write_fasta(out_file)

def tell_basepair(n, seq):
  bp = seq[n-1]
  return bp

но это не работает, и я получаю сообщение об ошибке:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 386: character maps to <undefined>

1 Ответ

0 голосов
/ 03 апреля 2019

Вы могли бы

  • попробуйте открыть файл .gz, прежде чем читать его как fasta [1] :
    with gzip.open("practicezip.fasta.gz", "rt") as handle:
        for record in SeqIO.parse(handle, "fasta"):
            #your code
  • если ошибка не устранена, укажите кодировку в вашей функции синтаксического анализа. Как говорится в руководстве BioPython SeqIO: «Для форматов файлов, таких как FASTA, где невозможно определить алфавит, может быть полезно указать алфавит явно». Итак:
    from Bio import SeqIO
    from Bio.Alphabet import generic_dna 
    filename = "yourfastafilename"
    for record in SeqIO.parse(filename, "fasta", generic_dna):
        # your code

В дополнение к ошибке UnicodeDecodeError вы также можете определить свою функцию some_function(sequence), иначе Python не будет знать, что делать, когда вы вызываете ее. Например:

def tell_basepair(n, seq):
  bp = seq[n-1]
  return bp
...