Python: obiectul de tip ‘_io.TextIOWrapper’ nu are len() (Programare, Python, String, Funcție, Bucle)

Anonim a intrebat.

Continui să primesc eroarea atunci când îmi execut codul:

TypeError: object of type ‘_io.TextIOWrapper’ has no len() function

Cum fac să deschid/citiți fișierul și să îl execut prin buclă?

Iată un link către fișierul pe care încerc să îl import: link de descărcare a secvenței de ADN

    def mostCommonSubstring():
        dna = open("dna.txt", "r")
        mink = 4
        maxk = 9
        count = 0
        check = 0
        answer = ""
        k = mink
        while k <= maxk:
            for i in range(len(dna)-k+1):
                sub = dna[i:i+k]
                count = 0
                for i in range(len(dna)-k+1):
                    if dna[i:i+k] == sub:
                        count = count + 1
                if count >= check:
                    answer = sub
                    check = count
            k=k+1
        print(answer)
        print(check)

Comentarii

  • Nu puteți apela len(dna) –  > Por JacobIRR.
  • Obiectele de fișier nu au un len. De asemenea, ele nu pot fi feliate/indexate, adică. dna[i:i+k] va eșua de asemenea –  > Por juanpa.arrivillaga.
2 răspunsuri
Nazim Kerimbekov

Problema apare din cauza modului în care deschideți fișierul text. ar trebui să adăugați dna = dna.read() la codul dvs. astfel încât codul dvs. final ar trebui să arate ceva de genul acesta:

def mostCommonSubstring():
    dna = open("dna.txt", "r")
    dna = dna.read()
    mink = 4
    maxk = 9
    count = 0
    check = 0
    answer = ""
    k = mink
    while k <= maxk:
        for i in range(len(dna)-k+1):
            sub = dna[i:i+k]
            count = 0
            for i in range(len(dna)-k+1):
                if dna[i:i+k] == sub:
                    count = count + 1
            if count >= check:
                answer = sub
                check = count
        k=k+1
    print(answer)
    print(check)

Fabian Tobar-Tosse

@tfabiant : Vă sugerez acest script pentru a citi și procesa o secvență ADN. Pentru a rula acest cod, în terminal: python readfasta.py fastafile.fasta

import string, sys
##########I. To Load Fasta File##############
file = open(sys.argv[1]) 
rfile = file.readline()
seqs = {} 
##########II. To Make fasta dictionary####
tnv = ""#temporal name value
while rfile != "":
    if ">" in rfile:
        tnv = string.strip(rfile)
        seqs[tnv] = ""
    else:
        seqs[tnv] += string.strip(rfile)    
    rfile = file.readline()
##############III. To Make Counts########
count_what = ["A", "T", "C", "G", "ATG"]
for s in seqs:
    name = s
    seq = seqs[s]
    print s # to print seq name if you have a multifasta file
    for cw in count_what:
        print cw, seq.count(cw)# to print counts by seq