Object of type io textiowrapper has no len ошибка

I keep getting the error when running my code:

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

How do I get it to open/read the file and run it through the loop?

Here’s a link to the file that I am trying to import:
download link of the DNA sequence

    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)

ktdrv's user avatar

ktdrv

3,6123 gold badges30 silver badges45 bronze badges

asked Feb 9, 2018 at 23:45

Anonymous's user avatar

2

The problem occurs due to the way you are opening the text file.
You should add dna = dna.read() to your code.
so your end code should look something like this:

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)

answered Feb 9, 2018 at 23:51

Nazim Kerimbekov's user avatar

Nazim KerimbekovNazim Kerimbekov

4,7028 gold badges33 silver badges58 bronze badges

0

@tfabiant : I suggest this script to read and process a DNA sequence.
To run this code, in the 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

answered Feb 22, 2018 at 0:59

Fabian Tobar-Tosse's user avatar

Hey, i’ve got a list inside a file like [«one», «two», «three»], which i’d like to import into my python script. I’ve tried it with
list1 = open(«list1.txt», «r») but that didn’t work. Could somebody help me with this please? I’m new to python and i just need to fix this one last problem.

This is the whole script.

import random, time, tweepy

list1 = open("list1.txt", "r")
list2 = open("list2.txt", "r")
list3 = open("list3.txt", "r")

def one():
    return random.choice(list1) + random.choice(list2)

def two():
    return random.choice(list2) + random.choice(list3)

#I'm working on a Twitter bot, that's just some twitter stuff down here 
consumer_key = 'XXX'
consumer_secret = 'XXX'
access_token = 'XXX'
access_token_secret = 'XXX'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

while True:
    postthis = random.choice([one,two])()
    if len(postthis) <= 140:
        api.update_status(status=postthis)
        time.sleep(10)

And the error message:

Traceback (most recent call last):
  File "C:/Users/User/Desktop/Example/example.py", line 22, in <module>
    postthis = random.choice([one,two])()
  File "C:/Users/User/Desktop/Example/example.py", line 11, in two
    return random.choice(list2) + random.choice(list3)
  File "C:UsersUserAppDataLocalProgramsPythonPython36-32librandom.py", line 256, in choice
    i = self._randbelow(len(seq))
TypeError: object of type '_io.TextIOWrapper' has no len()
>>>

I also don’t understand the error has no len(). The content of my files are just very long lists, nothing else included. Maybe somebody has an alternative solution? Thanks so much :)

Posts: 4,100

Threads: 59

Joined: Jan 2018

Reputation:
322

Apr-05-2018, 05:06 PM
(This post was last modified: Apr-05-2018, 05:09 PM by Gribouillis.)

You can use

import ast
with open('list1.txt') as infile:
    list1 = ast.literal_eval(infile.read())

The way you wrote things, list1 is an opened file object, not a list.


(Apr-05-2018, 04:47 PM)Epileptiker Wrote: I also don’t understand the error has no len().

The call to random.choice() evaluates the length of its argument. Python informs you that an open file object has no method to compute its length.

Posts: 3

Threads: 0

Joined: Apr 2018

Reputation:
0

how do i can share my query to the forum

Posts: 5

Threads: 2

Joined: Apr 2018

Reputation:
0

Oh my god it works. Awesome, thank you so much!

The problem occurs due to the way you are opening the text file.
You should add dna = dna.read() to your code.
so your end code should look something like this:

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)

Related videos on Youtube

Python AttributeError — What is it and how do you fix it?

05 : 20

Python AttributeError — What is it and how do you fix it?

python tutorial: TypeError: 'set' object is not subscriptable - Solved

05 : 39

python tutorial: TypeError: ‘set’ object is not subscriptable — Solved

Python Cơ bản Bài 13 | File IO in python

17 : 43

Python Cơ bản Bài 13 | File IO in python

Object Reference | Copy Objects in Python

14 : 10

Object Reference | Copy Objects in Python

Python TypeError: 'float' object is not iterable

01 : 55

Python TypeError: ‘float’ object is not iterable

How To Fix Type Error: Type Object is not Subscriptable

06 : 10

How To Fix Type Error: Type Object is not Subscriptable

TypeError : 'list' object is not callable solved in Python

00 : 31

TypeError : ‘list’ object is not callable solved in Python

TypeError: argument of type 'WindowsPath' is not iterable & 'NoneType' object is not subscriptable

01 : 59

TypeError: argument of type ‘WindowsPath’ is not iterable & ‘NoneType’ object is not subscriptable

Wrap an open stream with io.TextIOWrapper - PYTHON

01 : 38

Wrap an open stream with io.TextIOWrapper — PYTHON

Python AttributeError _io.TextIOWrapper object has no attribute split - PYTHON

01 : 05

Python AttributeError _io.TextIOWrapper object has no attribute split — PYTHON

How to read/print the ( _io.TextIOWrapper) data - PYTHON

01 : 10

How to read/print the ( _io.TextIOWrapper) data — PYTHON

Comments

  • I keep getting the error when running my code:

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

    How do I get it to open/read the file and run it through the loop?

    Here’s a link to the file that I am trying to import:
    download link of the DNA sequence

        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)
    

Recents

Related

I keep getting the error when running my code:

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

How do I get it to open/read the file and run it through the loop?

Here’s a link to the file that I am trying to import:
download link of the DNA sequence

    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)

Буквально самый простой способ исправить NullReferenceExeption имеет два пути. Если у вас есть GameObject, например, с прикрепленным скриптом и переменной с именем rb (rigidbody), эта переменная начнет пустую, когда вы начнете игру. Вот почему вы получаете NullReferenceExeption, потому что на компьютере нет данных, хранящихся в этой переменной.

В качестве примера я буду использовать переменную RigidBody. Мы можем добавить данные действительно легко на самом деле несколькими способами:

  1. Добавить RigidBody к вашему объекту с помощью AddComponent> Физика> Rigidbody Затем зайдите в свой скрипт и введите rb = GetComponent<Rigidbody>();. Эта строка кода работает лучше всего под ваши функции Start() или Awake().
  2. Вы можете добавить компонент программно и назначить переменную одновременно с одной строкой кода: rb = AddComponent<RigidBody>();

Дальнейшие заметки: если вы хотите, чтобы единство добавлялось компонент для вашего объекта, и вы, возможно, забыли добавить его, вы можете ввести [RequireComponent(typeof(RigidBody))] над объявлением класса (пробел ниже всех ваших приложений). Наслаждайтесь и получайте удовольствие от игр!

задан Shane 22 August 2010 в 06:23

поделиться

9 ответов

Не встроен, но алгоритм R(3.4.2) («Резервуарный алгоритм Уотермана») из «Искусство компьютерного программирования» Кнута хорош (в очень упрощенной версии):

import random

def random_line(afile):
    line = next(afile)
    for num, aline in enumerate(afile):
      if random.randrange(num + 2): continue
      line = aline
    return line

num + 2 создает последовательность 2, 3, 4 … Таким образом, randrange будет 0 с вероятностью 1.0/(num + 2) — и это вероятность, с которой мы должны заменить выбранную в данный момент линию (особый случай размер выборки 1 ссылочного алгоритма — см. книгу Кнута для доказательства корректности ==, и, конечно же, мы также имеем дело с достаточно маленьким «резервуаром» для размещения в памяти; -) … и точно вероятность с которым мы делаем так.

ответ дан Alex Martelli 27 August 2018 в 05:52

поделиться

Это зависит от того, что вы подразумеваете под «слишком большими» накладными расходами. Если сохранить весь файл в памяти, возможно, что-то вроде

import random

random_lines = random.choice(open("file").readlines())

выполнит трюк.

ответ дан cji 27 August 2018 в 05:52

поделиться

Вы можете добавить строки в набор (), который будет произвольно изменять их порядок.

filename=open("lines.txt",'r')
f=set(filename.readlines())
filename.close()

Чтобы найти 1-ю строку:

print(next(iter(f)))

Чтобы найти 3-й line:

print(list(f)[2])

Чтобы перечислить все строки в наборе:

for line in f:
    print(line)

ответ дан GoTrained 27 August 2018 в 05:52

поделиться

import random

with open("file.txt", "r") as f:
    lines = f.readlines()
    print (random.choice(lines))

ответ дан HCLivess 27 August 2018 в 05:52

поделиться

Если вы не хотите читать весь файл, вы можете искать его в середине файла, затем искать назад для новой строки и вызывать readline.

Вот Python3 скрипт, который делает именно это,

. Одним из недостатков этого метода является то, что короткие линии имеют более низкое вероятность появления.

def read_random_line(f, chunk_size=16):
    import os
    import random
    with open(f, 'rb') as f_handle:
        f_handle.seek(0, os.SEEK_END)
        size = f_handle.tell()
        i = random.randint(0, size)
        while True:
            i -= chunk_size
            if i < 0:
                chunk_size += i
                i = 0
            f_handle.seek(i, os.SEEK_SET)
            chunk = f_handle.read(chunk_size)
            i_newline = chunk.rfind(b'n')
            if i_newline != -1:
                i += i_newline + 1
                break
            if i == 0:
                break
        f_handle.seek(i, os.SEEK_SET)
        return f_handle.readline()

ответ дан ideasman42 27 August 2018 в 05:52

поделиться

Ищите случайную позицию, читайте строку и отбрасывайте ее, затем читайте другую строку. Распределение линий не будет нормальным, но это не всегда имеет значение.

ответ дан Ignacio Vazquez-Abrams 27 August 2018 в 05:52

поделиться

Хотя я опаздываю на четыре года, я думаю, что у меня есть самое быстрое решение. Недавно я написал пакет python под названием linereader , который позволяет вам манипулировать указателями дескрипторов файлов.

Вот простое решение для получения случайной строки с этим пакетом:

from random import randint
from linereader import dopen

length = #lines in file
filename = #directory of file

file = dopen(filename)
random_line = file.getline(randint(1, length))

В первый раз это делается хуже всего, так как linereader должен скомпилировать выходной файл в специальном формате. После этого linereader может получить доступ к любой строке из файла быстро, независимо от размера файла.

Если ваш файл очень маленький (достаточно маленький, чтобы вписаться в MB), вы можете заменить dopen с copen, и он делает кэшированную запись файла в памяти. Это происходит не только быстрее, но вы получаете количество строк в файле, поскольку оно загружается в память; это делается для вас. Все, что вам нужно сделать, это создать случайный номер строки. Вот пример кода для этого.

from random import randint
from linereader import copen

file = copen(filename)
lines = file.count('n')
random_line = file.getline(randint(1, lines))

Я просто очень рад, потому что увидел кого-то, кто мог бы воспользоваться моим пакетом! Извините за мертвый ответ, но пакет определенно может быть применен ко многим другим проблемам.

ответ дан Nick Pandolfi 27 August 2018 в 05:52

поделиться

Это может быть громоздким, но это работает, я думаю? (по крайней мере, для txt-файлов)

import random
choicefile=open("yourfile.txt","r")
linelist=[]
for line in choicefile:
    linelist.append(line)
choice=random.choice(linelist)
print(choice)

Он считывает каждую строку файла и добавляет его в список. Затем он выбирает случайную строку из списка. Если вы хотите удалить строку после ее выбора, просто сделайте

linelist.remove(choice)

. Надеюсь, что это может помочь, но, по крайней мере, никаких дополнительных модулей и импорта (кроме случайных) и относительно легкого.

ответ дан Philip Hughes 27 August 2018 в 05:52

поделиться

import random
lines = open('file.txt').read().splitlines()
myline =random.choice(lines)
print(myline)

Для очень длинного файла: найдите случайное место в файле на основе его длины и найдите два символа новой строки после позиции (или новой строки и конца файла). Повторите 100 символов до или с начала файла, если исходная позиция поиска была & lt; 100, если мы оказались внутри последней строки.

Однако это сложнее, так как файл является итератором. возьмите random.choice (если вам нужно много, используйте random.sample):

import random
print(random.choice(list(open('file.txt'))))

ответ дан Tony Veijalainen 27 August 2018 в 05:52

поделиться

Другие вопросы по тегам:

Похожие вопросы:

Возможно, вам также будет интересно:

  • Objc dll itunes ошибка
  • Obfoe7 ошибка мерседес актрос
  • Obf ошибка на частотнике
  • Nws 51051 коды ошибок
  • Nw 31205 1 ошибка ps 4

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии