1. ホーム
  2. python

[解決済み] AttributeError: '_io.TextIOWrapper' オブジェクトに 'next' 属性がない python

2022-02-09 11:36:40

質問

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'

解決方法は?

ここで問題に直面している理由は2つあります。ひとつは fo を書き込み専用にしています。読み書きができるファイルオブジェクトが必要です。また with キーワードを使用すると、ファイルオブジェクトを使い終わった後に、手動で閉じることを気にすることなく、自動的にファイルオブジェクトを破棄することができます。

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

2つ目は、(貼り付けたエラーが非常に強く示唆しているように)ファイルオブジェクトの 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

また、もう少しパイソン的な表現にしたい場合は 列挙する という関数があります。

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