2012-01-28 20 views
1
#1 
input_file = 'my-textfile.txt' 
current_file = open(input_file) 
print current_file.readline() 
print current_file.readline() 

#2 
input_file = 'my-textfile.txt' 
print open(input_file).readline() 
print open(input_file).readline() 

#1は正常に動作し、1行目と2行目を表示しますが、2行目は1行目を2部印刷し、#1と同じ行は印刷しません。Python readline - 最初の行のみを読み取る

+4

正直な質問ですが、私は真剣にいくつかのPythonプログラミング入門書を読むことをお勧めします。あなたの方法のエラーを完全に理解していない場合、将来のコードでこのような間違いは非常にイライラします。 – EmmEff

+1

** **を2回開けると、何を期待しましたか?同じ行が2回表示されます。 –

答えて

9

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) 
6

の2回のスニペットで、ファイルが1行ずつ読み込まれます。このファイルは、最初に読み込まれるたびに開くようになっています。

+0

ありがとう、私は今それを得た:) – Tomas

関連する問題