Ответ 1
Модуль fileinput
содержит кучу удобных функций, один из которых, похоже, делает именно то, что вы ищете:
for line in fileinput.input(["file.dat"]):
if not fileinput.isfirstline():
data = proces_line(line);
output(data)
Есть ли элегантный способ пропустить первую строку файла при использовании python
fileinput module?
У меня есть файл данных с хорошо сформированными данными, но первая строка - это заголовок. Используя fileinput
, я бы включил строку проверки и сброса, если строка не содержит данных.
Проблема заключается в том, что она применит ту же проверку для остальной части файла.
С помощью read()
вы можете открыть файл, прочитать первую строку, затем перейти к циклу над остальной частью файла. Есть ли подобный трюк с fileinput
?
Есть ли элегантный способ пропустить обработку первой строки?
Пример кода:
import fileinput
# how to skip first line elegantly?
for line in fileinput.input(["file.dat"]):
data = proces_line(line);
output(data)
Модуль fileinput
содержит кучу удобных функций, один из которых, похоже, делает именно то, что вы ищете:
for line in fileinput.input(["file.dat"]):
if not fileinput.isfirstline():
data = proces_line(line);
output(data)
lines = iter(fileinput.input(["file.dat"]))
next(lines) # extract and discard first line
for line in lines:
data = proces_line(line)
output(data)
или используйте способ itertools.islice, если вы предпочитаете
import itertools
finput = fileinput.input(["file.dat"])
lines = itertools.islice(finput, 1, None) # cuts off first line
dataset = (process_line(line) for line in lines)
results = [output(data) for data in dataset]
Так как все используемое - генераторы и итераторы, промежуточный список не будет создан.
Это правильно в документах: http://docs.python.org/library/fileinput.html#fileinput.isfirstline