2016-04-07 14 views
1

İlk olarak, Python'da yeniyim ve cevap aradım, ama şans yok. Şimdiye kadar bulduğum şey, sadece aşağıdaki kodum gibi bir satır döndürüyor. itertools.islice gibi diğer çözümleri denedim, ancak her zaman sadece bir satır geri aldım.Her üç (veya n inci) satırı Python'daki dosyadan nasıl yazdırılır?

Ben verilerin çizgiler içeren data.txt denilen dosya var:

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 
... 

Aşağıdaki kod var: sadece

"Bu yazdırır Bu durumda

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

dördüncü satır ".

Neden olduğunu anlıyorum ama buradan nasıl alabilirim ve 4, 7, 10, 13, ... satırlarını yazdırabilir miyim?

+3

Neden 1 örtüşmeyebilir? – usr2564301

+0

Doğru. 1. satırdan başlamalıyım. Aşağıda verilen çözümlere dayanarak "islice satırında (f, 0, Yok, 3)" yapabilirim: "Sonraki adım, boş satırlarla nasıl başa çıkılacağını anlamaktır. – buldozer

cevap

4

kullanmak gerekir:

islice (iterable start dur, [, adım]) -> islice nesnesi
Sonraki() yöntemi bir yinelenen seçili değerleri döndüren bir yineleyici döndür. [...]

Demo:

data.txt:

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

Kodu:

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

Demo için teşekkürler. Büyüleyici bir şekilde çalıştı. Benim sorunumun kaynak dosyamda olduğunu anlamamı sağladı. Bu yazı için ne elde etmeye çalıştığımı açıklamak için basit bir veri dosyası kullandım. Şerefe! – buldozer

0

Sizin kodunuzda x == 3 olduğunda yazdırma yapıyorsunuz, bu nedenle numaralandırma 0 ile başladığından bir dosyada yalnızca dördüncü satırı yazdırıyorsunuz.

Dene:

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

x%3 == 13 tarafından bölünme x dan kalan 1 olmak zorunda olduğu anlamına gelir. Bu şekilde 1, 4, 7, etc. satırlarını yazdıracaksınız. Eğer itertools.islice için iletebilirsiniz böylece

İlgili konular