cum să citiți un fișier fasta în python? (Programare, Python, Fasta)

user3098683 a intrebat.

Încerc să citesc un fișier FASTA și apoi să găsesc un fișier FASTA specific motiv(string) și să tipăresc secvența și numărul de ori de câte ori apare. A Fișier FASTA este doar o serie de secvențe (șiruri de caractere) care începe cu o linie de antet, iar semnătura pentru antet sau pentru începutul unei noi secvențe este „>”. imediat după antet, pe o nouă linie, se află secvența de litere.Încă nu am terminat codul, dar până acum am obținut acest lucru și îmi dă această eroare:

AttributeError: Obiectul ‘str’ nu are atributul ‘next’.

Nu sunt sigur ce este în neregulă aici.

import re

header=""
counts=0
newline=""

f1=open('fpprotein_fasta(2).txt','r')
f2=open('motifs.xls','w')
for line in f1:
    if line.startswith('>'):
        header=line
        #print header
        nextline=line.next()
        for i in nextline:
            motif="ML[A-Z][A-Z][IV]R"
            if re.findall(motif,nextline):
                counts+=1
                #print (header+'t'+counts+'t'+motif+'
')
        fout.write(header+'t'+counts+'t'+motif+'
')

f1.close()
f2.close()

Comentarii

  • Este o temă pentru educație sau este pentru muncă? Pentru că există mai multe biblioteci disponibile care fac deja acest lucru. –  > Por Lev Levitsky.
  • temă pentru școală. –  > Por user309868683.
3 răspunsuri
iainmcgin

Eroarea provine probabil de la linie:

nextline=line.next()

line este șirul pe care l-ați citit deja, nu există nici o next() metodă pe ea.

O parte a problemei este că încercați să amestecați două moduri diferite de citire a fișierului – iterați peste linii folosind for line in f1 și <handle>.next().

De asemenea, dacă lucrați cu fișiere FASTA, vă recomand să utilizați Biopython: acesta face ca lucrul cu colecțiile de secvențe să fie mult mai ușor. În special, Capitolul 14 privind motivele vă va interesa în mod deosebit. Acest lucru va necesita probabil să învățați mai multe despre Python pentru a obține ceea ce doriți, dar dacă veți face mult mai multă bioinformatică decât ceea ce arată exemplul dvs. de aici, atunci merită cu siguranță investiția de timp.

Comentarii

  • mulțumesc! da, voi folosi biopython. totuși, pentru această temă trebuie să folosesc python. ceea ce încerc să fac este că trebuie să citesc linia care urmează după antet, de aceea am folosit .next(), dar este evident că este greșit! –  > Por user3098683.
Arnaud P

Acest lucru ar putea să vă ajute să vă îndreptați în direcția corectă

import re

def parse(fasta, outfile):
    motif = "ML[A-Z][A-Z][IV]R"
    header = None
    with open(fasta, 'r') as fin, open(outfile, 'w') as fout:
            for line in fin:
                if line.startswith('>'):
                    if header is not None:
                        fout.write(header + 't' + str(count) + 't' + motif + '
')
                    header = line
                    count = 0
                else:
                    matches = re.findall(motif, line)
                    count += len(matches)
            if header is not None:
                fout.write(header + 't' + str(count) + 't' + motif + '
')
if __name__ == '__main__':
    parse("fpprotein_fasta(2).txt", "motifs.xls")

Ray

Nu sunt sigur în ceea ce privește chestiile legate de paste, dar sunt destul de sigur că ai greșit aici:

nextline=line.next()

line este pur și simplu un str, , deci nu poți apela str.next()

De asemenea, în ceea ce privește fișierele, ți se recomandă să folosești:

with open('fpprotein_fasta(2).txt','r') as f1:

Aceasta se va ocupa de închiderea automată a fișierului.

Sunteți încurajat să furnizați un fișier fasta de probă, astfel încât să pot încerca să corectez codul.

Comentarii

  • >gi|951040|emb|CAA62241. 1| alcool dehidrogenază [Rattus norvegicus] MGTQGKKVITCKAAIAWKTDSPLCIEEIEVSPPKAHEVRIKVIATCVCPTPTDINATNPKKKALFPVVLGHECAGIVESVGPGVTNFKPGDKVIPFFAPQCKKCKLCLSPLTNLCGKLRNFKYPTIDQELMEDRTSRFTSIKERSIYHFMGVSSFSSFSQYTVVSEANLARVDDEANLERVCLIGCGFTSGYGAAINTAKVTPGSACAVFGLGCVGL – –  > Por user3098683.
  • deci acesta este exemplul de format. cu antetul fiind >gi|951040|balh blah blah blah și următoarea linie este ceea ce încerc să găsesc motivul în. –  > Por user309898683.