Python - AttributeError: объект '_io.TextIOWrapper' не имеет атрибута 'append'

я получаю сообщение об ошибке

ClassFile.append(filelines) AttributeError: '_io.TextIOWrapper' object has no attribute 'append'

при попытке записать файл. Речь идет о написании файла с оценками учеников, их имени, фамилии, имени класса (просто введите класс как Class 1), подсчете количества баллов и их баллов. Только их последние 3 балла должны быть сохранены в файле. Я не понимаю, что это значит.

Вот код

score=3
counter=0

name=input('Name:')
surname=input('Last Name:')
Class=input('Class Name:')

filelines=[]

Class=open(Class+'.txt','r')
line=Class.readline()
while line!='':
    Class.append(filelines)
    Class.close()

linecount=len(filelines)
for i in range(0,linecount):
    data=filelines[i].split(',')

person Klodiano    schedule 02.06.2015    source источник
comment
это просто означает, что файловый объект не имеет метода с именем append()   -  person FinalState    schedule 02.06.2015
comment
Я не совсем понимаю, что происходит, но вы открываете файл в режиме чтения ('r'), а затем пытаетесь записать в файл ('append'). Может быть, вам нужно открыть его с помощью 'r+', чтобы вы могли читать и писать. Кроме того, файлы имеют методы записи write/writelines, а не append. Вы используете python3, верно? Если да, отметьте свой вопрос как таковой, это поможет :)   -  person NordCoder    schedule 02.06.2015


Ответы (2)


Вы перепутали свой код добавления; метод append() относится к объекту filelines:

ClassFile=open(CN+'.txt','r')
line=ClassFile.readline()
while line!='':
    filelines.append(line)
ClassFile.close()

Обратите внимание, что я также переместил вызов close() за пределы цикла.

Вам не нужно использовать цикл while; если вам нужен список со всеми строками, вы можете просто сделать:

ClassFile=open(CN+'.txt','r')
filelines = list(ClassFile)
ClassFile.close()

Чтобы обрабатывать закрытие файла, используйте файловый объект в качестве менеджера контекста:

with open(CN + '.txt', 'r') as openfile:
    filelines = list(openfile)
person Martijn Pieters    schedule 02.06.2015

ClassFile — это объект типа _io.TextIOWrapper, не имеющий атрибута append. Вы ошибочно принимаете его за объект типа List. Кажется, вместо ClassFile.append(filelines) вам нужно что-то вроде filelines.append(line). Если вы хотите что-то записать в файл, откройте его в режиме записи или добавления (в зависимости от ваших потребностей) и запишите в него нужную строку.

person Ishan Anand    schedule 02.06.2015