Я хочу пропустить первые 17 строк при чтении текстового файла.
Позвольте'ы сказать, файл выглядит так:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
good stuff
Я просто хочу, чтобы хорошие вещи. То, что я'м делаешь это намного сложнее, но сейчас я'м нелады.
Использовать срез, как показано ниже:
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
переменной.
Вы получите индекс (Инт) и строка (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 -> ВФ
Если вы Don'т хотите, чтобы прочитать весь файл в память сразу, вы можете использовать несколько приемов:
С Next(итератор)` вы можете перейти к следующей строке:
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)
Вот результаты помогите другим топ 2 ответы. Обратите внимание, что "файл.тхт" это текстовый файл, содержащий 100,000+ линии случайную строку с файл размером 1МБ+.
Используя модуле itertools:
import itertools
from timeit import timeit
timeit("""with open("file.txt", "r") as fo:
for line in itertools.islice(fo, 90000, None):
line.strip()""", number=100)
>>> 1.604976346003241
С помощью двух циклов for:
from timeit import timeit
timeit("""with open("file.txt", "r") as fo:
for i in range(90000):
next(fo)
for j in fo:
j.strip()""", number=100)
>>> 2.427317383000627
очевидно, метод модуле itertools является более эффективным при работе с большими файлами.
Вы можете использовать список понимание, чтобы сделать это один-лайнер:
[fl.readline() for i in xrange(17)]
Подробнее о Список понимания в ПЭП 202 и в документации Python.