使用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)
答案 0 :(得分:17)
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]
由于使用的所有内容都是生成器和迭代器,因此不会构建任何中间列表。
答案 1 :(得分:15)
fileinput
模块包含一系列方便的功能,其中一个似乎完全符合您的要求:
for line in fileinput.input(["file.dat"]):
if not fileinput.isfirstline():
data = proces_line(line);
output(data)
答案 2 :(得分:5)
答案 3 :(得分:0)
with open(file) as j: #open file as j
for i in j.readlines()[1:]: #start reading j from second line.
答案 4 :(得分:0)
一种选择是使用 openhook
:
openhook,当给出时,必须是一个带有两个参数的函数, 文件名和模式,并返回相应打开的类文件对象。 不能同时使用 inplace 和 openhook。
可以创建辅助函数 skip_header
并将其用作 openhook,例如:
import fileinput
files = ['file_1', 'file_2']
def skip_header(filename, mode):
f = open(filename, mode)
next(f)
return f
for line in fileinput.input(files=files, openhook=skip_header):
# do something