AttributeError: объект '_io.TextIOWrapper' не имеет атрибута 'next' python

Я использую python 3.3.3. Я делаю учебник с tutorialspoint.com. Я не могу понять, что это за ошибка.

Вот мой код:

fo = open("foo.txt", "w")
print ("Name of the file: ", fo.name)

# Assuming file has following 5 lines
# This is 1st line
# This is 2nd line
# This is 3rd line
# This is 4th line
# This is 5th line

seq = ["This is 6th line\n", "This is 7th line"]
# Write sequence of lines at the end of the file.
fo.seek(0, 2)
line = fo.writelines( seq )

# Now read complete file from beginning.
fo.seek(0,0)
for index in range(7):
 #  line = fo.next()
   print ("Line No %d - %s" % (index, line)+"\n")

# Close opend file
fo.close()

Ошибка:

Name of the file:  foo.txt
Traceback (most recent call last):
  File "C:/Users/DELL/Desktop/python/s/fyp/filewrite.py", line 19, in <module>
    line = fo.next()
AttributeError: '_io.TextIOWrapper' object has no attribute 'next'

Ответ 1

Здесь есть две причины, по которым вы столкнулись с проблемами. Во-первых, вы создали fo только в режиме записи. Вам нужен файловый объект, который может читать и писать. Вы также можете использовать ключевое слово with для автоматического уничтожения объекта файла после его завершения, вместо того, чтобы беспокоиться о его закрытии вручную:

# the plus sign means "and write also"
with open("foo.txt", "r+") as fo:
    # do write operations here
    # do read operations here

Во-вторых, (например, что вы вставляете очень сильно) объект файла fo, объект текстового файла, не имеет метода next. Вы используете учебник, написанный для Python 2.x, но вы используете Python 3.x. Это не будет хорошо для вас. (Я считаю, что next был/может быть действителен в Python 2.x, но он не в 3.x.) Скорее, наиболее похоже на next в Python 3.x readline, например:

for index in range(7):
    line = fo.readline()
    print("Line No %d - %s % (index, line) + "\n")

Обратите внимание, что это будет работать, только если файл имеет не менее 7 строк. В противном случае вы столкнетесь с исключением. Более безопасный и простой способ итерации через текстовый файл состоит из цикла for:

index = 0
for line in file:
    print("Line No %d - %s % (index, line) + "\n")
    index += 1

Или, если вы хотите получить немного больше pythonic, вы можете использовать функцию enumerate:

for index, line in enumerate(file):
    print("Line No %d - %s % (index, line) + "\n")

Ответ 2

Вы не правильно следуете руководству. Вы открыли файл Только запись open("foo.txt", "w")

Действие line = fo.next() является прочитанным, поэтому, очевидно, оно сработает. Поэтому исправьте его, открыв в качестве записи и: fo = open("foo.txt", "r+")

Но это только для Python 2.7, вы должны использовать next или исправить итерацию другим способом. Проверьте ответ @furkle.

Учебник, вероятно, также неверен, см. объяснение режимов здесь: открытая встроенная функция python: разница между режимами a, a +, w, w + и r +?

Ответ 3

Вы можете использовать fo.\__next__() или fo.next() в python3.x.