2012-09-28 7 views
15

私はファイルを読み込んでいて、forループの次の行を読み込む方法があるのだろうか?私は現在、このようにファイルを読んでいますファイルの次の行を取得する

file = open(input,"r").read() 
for line in file.splitlines(): 
    line = doSomething() 

だから、とにかく私はdoSomething()機能にいくつかの操作を行うことができるようなループのためにその中のファイルの次の行を取得することができますか?開いているファイルを超える

おかげ

答えて

30

だけループを:

infile = open(input,"r") 
for line in infile: 
    line = doSomething(line, next(infile)) 

あなたが今イテレータとしてファイルを使用するので、あなたは余分な行を取得するために、いつでもinfile変数にnext() functionを呼び出すことができます。

2つの余分なヒント:

  1. はあなたの変数fileを呼び出さないでください。 Pythonで組み込みのfileタイプのオブジェクトをマスクします。代わりにinfileという名前を付けました。

  2. オープンファイルは、with文を持つコンテキストマネージャとして使用できます。完了したら、それは自動的にファイルを閉じます:

    with open(input,"r") as infile: 
        for line in infile: 
         line = doSomething(line, next(infile)) 
    
+0

これは実際にカウンタをインクリメントするので、これは私のインデックスソリューションより優れています... –

+0

@Martijin:小さなクエリ: 'next()'を使用すると、ポインタが次の行に移動しますが、 forループに "next"行を読み込んだり、次の行に渡したりしますか? – Konstant

+0

@ Constant:次へ次へ'for'ループを使用すると' .next() 'も呼び出され、そのたびにファイルが終了するまで* new *行が返されます。 –

6
file = open(input,"r").read() 
lines = file.read().splitlines() 
for i in range(len(lines)): 
    line = lines[i] 
    next_line = lines[i+1] 
+3

なぜ-1? ...これは尋ねられたことです... Martjinの答えはより良いですが、これはあなたに次の行を与えます(少なくとも今は..読んでいませんでした)... –

8

私はあなたがラインnにある場合、あなたはラインのn + 1にアクセスできるようにすることを意味していると思います。

それを行うための最も簡単な方法は、あなたがlines[i]と現在の行とlines[i+1]

で次の行を取得することができます

lines = file.readlines() 
for i in xrange(len(lines)): 

for line in file.splitlines():

を交換することですより多くのpythonic方法は列挙を使用することです

現在の行は通常の行のように「行」になりますが、別の行を見つけたい場合はインデックスもあります。

+0

Martinは私が編集者。彼は少しばかりですが、列挙オプションを認識することはまだ価値があります。 – BostonJohn

+0

2016年にこの答えを見ると、xrangeはPython 3には存在せず、代わりに 'range'が使われるべきであるという指摘があります。 – Michael

関連する問題