2009-10-06 57 views
12

當使用python文件輸入模塊時,是否有跳過第一行文件的優雅方式?使用python文件輸入模塊時跳過第一行的優雅方法?

我有很好的格式化數據的數據文件,但第一行是標題。使用fileinput如果行看起來不包含數據,我將不得不包含檢查和放棄行。

問題是它會對文件的其餘部分應用相同的檢查。 隨着read()你可以打開文件,讀第一行然後去循環其餘的文件。與fileinput有類似的詭計嗎?

有沒有一種優雅的方式來跳過第一行的處理?

示例代碼:

import fileinput 

# how to skip first line elegantly? 

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

回答

14

fileinput模塊包含了一堆的方便功能,其中之一似乎做的正是你要尋找的:

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

fileinput module documentation

+0

+1不錯,我現在看看它,即使從這裏看起來像檢查適用於每一行...但我可能是錯誤的,再加上它可能只是檢查行號,所以我不必... – stefanB 2009-10-06 03:30:45

+0

爲什麼你會檢查它的每一行,如果你已經知道第一行將在一開始就有一次,是不是浪費? – svural 2017-12-07 21:47:50

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

或者如果你喜歡

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] 

由於所使用的一切是發電機和迭代器使用itertools.islice方式,沒有中間的列表將建成。