2011-07-08 11 views
6

私は複数の行で作成した.txtファイルを持っています。Python 3.2 - readline()はソースファイル内の行をスキップしています

forループをカウントアキュムレータで実行すると、行がスキップされます。

それは等...

それは私が何をしないのよさ、一番上の行をスキップし、第二で始まり、4番目、6番目を出力しますか?

** for your reading pleasure** 
def main(): 
    # Open file line_numbers.txt 
    data_file = open('line_numbers.txt', 'r') 

    # initialize accumulatior 
    count = 1 


    # Read all lines in data_file 
    for line in data_file: 
     # Get the data from the file 
     line = data_file.readline() 

     # Display data retrieved 
     print(count, ": ", line) 

     # add to count sequence 
     count += 1 
+0

私は@Shelhammerがそれを釘付けと思います。私は、 "in"が読むことを自明ではないと思う。まあ、そうです。 – Malvolio

答えて

6

"line = data_file.readline()"を削除してみますか?私は、 "for data_file:inline"もreadline操作であると考えています。

+0

ここではスキップしませんが、出力には空白行が数えられますか? 1-5の代わりに、その返す1 - 11 –

+0

もう一度、完璧!ありがとうございました!!! –

6

あなたはforループがdata_fileを反復しており、あなたのreadline()がそれと競合しています。この結果のためにあなたのコードのline = data_file.readline()行を消去:

# Read all lines in data_file 
count = 1 
for line in data_file: 
    # Display data retrieved 
    print(count, ": ", line) 

    # add to count sequence 
    count += 1 
+0

完璧!ありがとうございました! –

3

for line in data_fileはすでにあなたのために各行のテキストを取得します - そして、readlineのための後続の呼び出しがライン以下取得します。言い換えれば、readlineへの呼び出しを削除することは、あなたが望むことをするでしょう。同時に、あなたはアキュムレータ変数のことは自分を追跡する必要はありません - Pythonはenumerateを使ってこれを行うの組み込みの方法を持っています - 他の言葉で:

data_file = open('line_numbers.txt', 'r') 
for count, line in enumerate(data_file): 
    ... 
+0

+1 for 'enumerate()' – bernie

+0

OPの編集のために、 'open( 'line_numbers.txt')をdata_file:' –

+0

+1 enumerate()のために使用すると、さらに改善させてください。それがゼロからの数字であることを忘れないでください。人間が消費するために印刷するときは、カウントに1を追加することがよくあります。ほとんどの人は1ベースの番号付けでより快適です。 – holdenweb

関連する問題