open
に電話すると、最初にファイルを開き、最初の行から開始します。すでに開いているファイル上でreadline
を呼び出すたびに、内部の「ポインタ」を次の行の先頭に移動します。しかし、ファイルを再度開くと "ポインタ"も再初期化されます。readline
を呼び出すと、最初の行が再び読み込まれます。
open
はこのように見えたfile
オブジェクトが返さことを想像して:あなたの出力間
Starting up a new file instance for /my-textfile.txt pointing at position 0.
Read line from 0 to 80 (80 + 0)
Read line from 80 to 160 (80 + 80)
:あなたはあなたの最初の例を実行したときに、次の出力のようなものになるだろう
class File(object):
"""Instances of this class are returned by `open` (pretend)"""
def __init__(self, filesystem_handle):
"""Called when the file object is initialized by `open`"""
print "Starting up a new file instance for {file} pointing at position 0.".format(...)
self.position = 0
self.handle = filesystem_handle
def readline(self):
"""Read a line. Terribly naive. Do not use at home"
i = self.position
c = None
line = ""
while c != "\n":
c = self.handle.read_a_byte()
line += c
print "Read line from {p} to {end} ({i} + {p})".format(...)
self.position += i
return line
を2番目の例は次のようになります。
Starting up a new file instance for /my-textfile.txt pointing at position 0.
Read line from 0 to 80 (80 + 0)
Starting up a new file instance for /my-textfile.txt pointing at position 0.
Read line from 0 to 80 (80 + 0)
正直な質問ですが、私は真剣にいくつかのPythonプログラミング入門書を読むことをお勧めします。あなたの方法のエラーを完全に理解していない場合、将来のコードでこのような間違いは非常にイライラします。 – EmmEff
** **を2回開けると、何を期待しましたか?同じ行が2回表示されます。 –