2016-04-07 20 views
1

まず、私はPythonを初めて使い、答えを探しましたが、運はありません。これまで私が見つけたものは、私のコードのように1行しか返しません。私はitertools.isliceのような他のソリューションを試しましたが、常に1行だけ戻ってきます。Pythonでファイルから3番目(またはn番目)の行をすべて印刷する方法は?

私はデータの行を含むdata.txtをというファイルがあります。それだけで

「これを印刷します。この場合

with open('data.txt', 'r') as f: 
    for x, line in enumerate(f): 
     if x == 3: 
      print(line) 

:私は、次のコードを持っている

This is line one 
This is line two 
This is line three 
This is line four 
This is line five 
This is line six 
This is line seven 
... 

を4行目です "。

私はなぜそれをここから取って4,7,10,13 ...という行を印刷するのかを理解していますか?

+3

なぜ1行目ではありませんか? – usr2564301

+0

真。私は1行目から始める必要があります。以下に示す解決策に基づいて、私は "islice(f、0、None、3)の行のために"行うことができます: "次のステップは、空行を扱う方法を理解することです。 – buldozer

答えて

4

を使用する必要があります。

islice(反復可能、スタート、stop [、step]) - > isliceオブジェクト
iterableの から選択した値をnext()メソッドが返すイテレータを返します。 [...]

デモ:

data.txt

line1 
line2 
line3 
line4 
line5 
line6 
line7 
line8 
line9 
line10 
line11 
line12 
line13 

コード:

>>> from itertools import islice 
>>> with open('data.txt') as f: 
...  for line in islice(f, 3, None, 3): 
...   print line, # Python3: print(line, end='') 
... 
line4 
line7 
line10 
line13 
+0

デモをありがとうございました。それは魅力のように働いた。私の問題は私のソースファイルにあることに気がつきました。この記事では、私が達成しようとしていることを説明するために単純なデータファイルを使用しました。乾杯! – buldozer

0

コード内x == 3のときに印刷していますので、列挙は0で始まるので、4行目のみをファイルに印刷しています。

試してみてください。

with open('data.txt', 'r') as f: 
    for x, line in enumerate(f): 
     if x%3 == 1: 
      print(line) 

x%3 == 13による除算xから残りは1なければならないことを意味します。 このようにして、1, 4, 7, etc.という行を印刷します。

0

あなたはitertools.isliceにそれを渡すことができるようにopenの戻り値は、イテレータ(したがって、反復可能)であるhttps://en.wikipedia.org/wiki/Modular_arithmetic

with open('data.txt', 'r') as f: 
    for x, line in enumerate(f): 
     if x % 3 == 0: 
      print(line) 
関連する問題