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
3,6123 gold badges30 silver badges45 bronze badges
asked Feb 9, 2018 at 23:45
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 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
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
05 : 20
Python AttributeError — What is it and how do you fix it?
05 : 39
python tutorial: TypeError: ‘set’ object is not subscriptable — Solved
17 : 43
Python Cơ bản Bài 13 | File IO in python
14 : 10
Object Reference | Copy Objects in Python
01 : 55
Python TypeError: ‘float’ object is not iterable
06 : 10
How To Fix Type Error: Type Object is not Subscriptable
00 : 31
TypeError : ‘list’ object is not callable solved in Python
01 : 59
TypeError: argument of type ‘WindowsPath’ is not iterable & ‘NoneType’ object is not subscriptable
01 : 38
Wrap an open stream with io.TextIOWrapper — PYTHON
01 : 05
Python AttributeError _io.TextIOWrapper object has no attribute split — 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 sequencedef 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. Мы можем добавить данные действительно легко на самом деле несколькими способами:
- Добавить RigidBody к вашему объекту с помощью AddComponent> Физика> Rigidbody Затем зайдите в свой скрипт и введите
rb = GetComponent<Rigidbody>();
. Эта строка кода работает лучше всего под ваши функцииStart()
илиAwake()
. - Вы можете добавить компонент программно и назначить переменную одновременно с одной строкой кода:
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
поделиться
Другие вопросы по тегам: