2016-09-29 17 views
1

私はPythonの初心者です。しかし、私はreadline()メソッドを使用しようとするといくつかの問題があります。私は、Macのターミナル上でそれを実行しようとしたときPythonのreadline()リターンについて混乱しています

f=raw_input("filename> ") 
a=open(f) 
print a.read() 
print a.readline() 
print a.readline() 
print a.readline() 

と私のtxtファイルが

aaaaaaaaa 
bbbbbbbbb 
ccccccccc 

では、しかし、私はこれを得た:

aaaaaaaaa 
bbbbbbbbb 
ccccccccc 

それはreadlineの(と思われる)でありますまったく動かない。 しかし、私がprint a.read()を無効にすると、readline()は正常に動作します。

これは私を多く混乱させます。 read()とreadline()を同時に使用できるソリューションはありますか?

+7

'read()'はすべてを読み込みます(または試みます)。その後、ファイル 'a'の終わりに達しました。したがって、' readline() 'で読むことは何も残っていません。 – Evert

+0

@ cricket_007おそらく、悪いキーボードや悪い眼鏡の結果でしょう。 – Evert

+1

'a.read()'と最初の 'a.readline()'の間に 'a.seek(0)'を行うことができます。私はなぜあなたがそれをしたいと思うかわかりません。 – DeepSpace

答えて

5

ファイルを開くと、ファイルのある場所へのポインタが表示されます(デフォルトでは、最初です)。今、あなたは.read()または.readline()このポインタが移動を実行するたび:

  1. .read()は、ファイルの最後まで読み、最後にポインタを移動(任意の読書への一層の呼び出しは何も与えない)改行があるまで
  2. .readline()読み取り見て、あなたは手動でPを移動することができたい場合、それは
  3. .read(X)は、Xバイトを読み込み、CURRENT_LOCATION + Xでポインタを設定した後、ポインタ(または終了)

を設定し、 o Xがファイル内の場所(バイトの配列と見なされます)であるa.seek(X)コールを発行します。例えば、これはあなたに望ましい出力を与えるはずです:

print a.read() 
a.seek(0) 
print a.readline() 
print a.readline() 
print a.readline() 
1

あなたはファイルポインタの概念を理解する必要があります。ファイルを読むと、ファイルは完全に消費され、ポインタはファイルの最後にあります。

readline()がまったく機能していないようです。

期待どおりに動作しています。読み取る行はありません。

print a.read()を無効にすると、readline()は正常に動作します。

ポインタはファイルの先頭にあり、ラインが

を読み取ることができますので、私は(読み使用することができます任意のソリューションがあります)とのreadline()を同時に?

確かに。数行を読み、ファイルの残りの部分を読み飛ばしたり、ファイルポインタを望む位置に戻したりしてください。

また、あなたは、ファイルオブジェクトaが、それは、ファイル内の位置です覚えて、それを

+2

私はあなたが何かを閉じることを忘れることに関して話している文章を閉じるのを忘れてしまったのは面白いと思う:-)(期間をつけて閉じる、私は意味する) –

0

を読み終わったら、ファイルをクローズすることを忘れないでください。

  • a.read()(ファイルの最後に位置を移動する)現在の位置からファイルの末尾に読み出し
  • a.readline()次に位置を移動現在の位置から行の最後(に読み出します行内)
  • a.seek(n)ファイル内のnの位置に移動します(何も返さずに)
  • a.tell()はファイル内の位置を返します。

したがって、最初にreadlineを呼び出してみてください。 readlineを呼び出した回数に応じて、読み込み呼び出しがファイル全体を返すことはなく、残った行(おそらくnone)だけを返すことに気付くでしょう。シークして遊び、何が起こっているかを確認してください。

詳細here

関連する問題