使用python fileinput模块时优雅地跳过第一行的方法?
有没有什么简单优雅的方法可以在使用 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)