Элегантный способ пропустить первую строку при использовании модуля ввода файла Python? - PullRequest
13 голосов
/ 06 октября 2009

Есть ли элегантный способ пропустить первую строку файла при использовании 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)

Ответы [ 4 ]

17 голосов
/ 06 октября 2009
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]

Поскольку все используемые элементы являются генераторами и итераторами, промежуточный список не будет создан.

15 голосов
/ 06 октября 2009

Модуль fileinput содержит множество полезных функций, одна из которых, кажется, выполняет именно то, что вы ищете:

for line in fileinput.input(["file.dat"]):
  if not fileinput.isfirstline():
    data = proces_line(line);
    output(data)

файл входной документации модуля

5 голосов
/ 06 октября 2009

Это правильно в документах: http://docs.python.org/library/fileinput.html#fileinput.isfirstline

0 голосов
/ 08 февраля 2019
with open(file) as j: #open file as j
    for i in j.readlines()[1:]: #start reading j from second line.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...