2009-10-06 12 views
12

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) 

答えて

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

+0

最初の行が最初に一度来ることがわかっているのなら、それはすべての行についてチェックするのですか?無駄ですか? – svural

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の方法を使用して使用し、すべてが発電機とイテレータなので、中間のリストが構築されません。

関連する問題