Пропустить первую пару строк при чтении строк в файле Python
Я хочу пропустить первые 17 строк при чтении текстового файла.
допустим, файл выглядит так:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
good stuff
Я просто хочу хорошие вещи. То, что я делаю, намного сложнее, но с этой частью у меня проблемы.
8 ответов
используйте срез, как показано ниже:
with open('yourfile.txt') as f:
lines_after_17 = f.readlines()[17:]
Если файл слишком велик для загрузки в память:
with open('yourfile.txt') as f:
for _ in range(17):
next(f)
for line in f:
# do stuff
использовать itertools.islice
, начиная с индекса 17. Он автоматически пропустит 17 первых строк.
import itertools
with open('file.txt') as f:
for line in itertools.islice(f, 17, None): # start=17, stop=None
# process lines
for line in dropwhile(isBadLine, lines):
# process as you see fit
полная демо:
from itertools import *
def isBadLine(line):
return line=='0'
with open(...) as f:
for line in dropwhile(isBadLine, f):
# process as you see fit
преимущества: это легко расширяется до случаев, когда ваши префиксные строки сложнее, чем "0" (но не взаимозависимы).
это решение помогло мне пропустить количество строк, указанное linetostart
переменной.
Вы получаете индекс (int) и строку (string), если хотите отслеживать их тоже.
В вашем случае вы заменяете linetostart на 18 или назначаете 18 переменной linetostart.
f = open("file.txt", 'r')
for i, line in enumerate(f, linetostart):
#Your code
вот способ получить строки между двумя номерами строк в файле:
import sys
def file_line(name,start=1,end=sys.maxint):
lc=0
with open(s) as f:
for line in f:
lc+=1
if lc>=start and lc<=end:
yield line
s='/usr/share/dict/words'
l1=list(file_line(s,235880))
l2=list(file_line(s,1,10))
print l1
print l2
выход:
['Zyrian\n', 'Zyryan\n', 'zythem\n', 'Zythia\n', 'zythum\n', 'Zyzomys\n', 'Zyzzogeton\n']
['A\n', 'a\n', 'aa\n', 'aal\n', 'aalii\n', 'aam\n', 'Aani\n', 'aardvark\n', 'aardwolf\n', 'Aaron\n']
просто вызовите его с одним параметром, чтобы получить из строки n - > EOF
Если вы не хотите читать весь файл в память сразу, вы можете использовать несколько трюков:
С next(iterator)
вы можете перейти к следующей строке:
with open("filename.txt") as f:
next(f)
next(f)
next(f)
for line in f:
print(f)
конечно, это слабо уродливо, поэтому itertools имеет лучший способ сделать это:
from itertools import islice
with open("filename.txt") as f:
# start at line 17 and never stop (None), until the end
for line in islice(f, 17, None):
print(f)
вы можете использовать понимание списка, чтобы сделать его однострочным:
[fl.readline() for i in xrange(17)]
подробнее о понимании списка в PEP 202 и документация Python.