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

14 投票
6 回答
16343 浏览
提问于 2025-04-15 14:50

有没有什么简单优雅的方法可以在使用 python 的 fileinput 模块时跳过文件的第一行?

我有一个数据文件,里面的数据格式很好,但第一行是标题。使用 fileinput 的话,我就得检查每一行,如果发现某一行看起来不包含数据,就得把它丢掉。

问题是,这样的检查会对文件的其余部分也适用。用 read() 方法,你可以打开文件,先读第一行,然后再循环读取后面的内容。请问在 fileinput 中有没有类似的技巧?

有没有什么优雅的方法可以跳过处理第一行?

示例代码:

import fileinput

# how to skip first line elegantly?

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

6 个回答

18
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]

因为使用的都是生成器和迭代器,所以不会创建中间的列表。

16

fileinput模块里有很多实用的功能,其中有一个功能似乎正好符合你的需求:

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

fileinput模块的文档

撰写回答