使用python fileinput模块时跳过第一行的优雅方式?

ste*_*anB 13 python file-io

使用pythonfileinput模块时是否有一种优雅的方式来跳过第一行文件?

我有数据文件,格式很好,但第一行是标题.fileinput如果该行似乎不包含数据,则必须使用check和discard line.

问题是它会对文件的其余部分应用相同的检查.有了read()你可以打开文件,读取然后第一线去遍历文件的其余部分.有类似的伎俩fileinput吗?

是否有一种优雅的方式来跳过第一行的处理?

示例代码:

import fileinput

# how to skip first line elegantly?

for line in fileinput.input(["file.dat"]):
    data = proces_line(line);
    output(data)
Run Code Online (Sandbox Code Playgroud)

nos*_*klo 17

lines = iter(fileinput.input(["file.dat"]))
next(lines) # extract and discard first line
for line in lines:
    data = proces_line(line)
    output(data)
Run Code Online (Sandbox Code Playgroud)

或者如果您愿意,可以使用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]
Run Code Online (Sandbox Code Playgroud)

由于使用的所有内容都是生成器和迭代器,因此不会构建任何中间列表.


Phi*_*hil 15

fileinput模块包含一系列方便的功能,其中一个似乎完全符合您的要求:

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

fileinput模块文档