2011-12-10 13 views
1

圧縮ファイルを読み込むためにfileinputを試していますが、次の3つの方法を試しましたが、どれも実際には動作しません。最初のコマンドについてはopenbook = hook_compressedでのファイル入力の使用

file=os.join.path(path+filename) 

for i,line in enumerate(fileinput([file], openhook=gzip.open)): 
for i,line in enumerate(fileinput.input(openhook=fileinput.hook_compressed(file1,'r'))): 
for i,line in enumerate(fileinput.FileInput(openhook=fileinput.hook_compressed(file1,'r'))): 

、エラーが似ています:

3番目のコマンドについては
'module' object is not callable 

、のようなエラー:openhookをここに呼び出し可能でない理由

Traceback (most recent call last): 
    File "read_file.py", line 15, in <module> 
    for i,line in enumerate(fileinput.input(openhook=fileinput.hook_compressed(file1,'r'))): 
    File "/share/lib/python2.6/fileinput.py", line 103, in input 
    _state = FileInput(files, inplace, backup, bufsize, mode, openhook) 
    File "/share/lib/python2.6/fileinput.py", line 230, in __init__ 
    raise ValueError("FileInput openhook must be callable") 
ValueError: FileInput openhook must be callable 

は、私は理解していませんか?

誰もがこれを手伝ってくれますか? thx

答えて

3

関数オブジェクトをフックパラメータとして渡し、関数を呼び出さないでください。より詳細には

for i, line in enumerate(fileinput.input(openhook=fileinput.hook_compressed)): 
    sys.stdout.write("%-6i %s" % (i, line)) 

functionは、(何か誰かがdef又はlambdaで宣言)関数オブジェクトである場合、次いで

variable = function() 

関数を呼び出し、variableに結果を格納します。代わりに、あなたは今のように効果的に

function() 

これの同義語を

variable() 

を使用することができるようにあなたは、(参照する)variableに関数オブジェクトを割り当てる

variable = function 

を言うとき使い方は比較的まれですが、フック変数の標準は間違いありません(実際、フック変数の全ポイント - 彼らはあなたの中に独自の関数を置くことができる "フック"を提供します) e別のクラスまたは関数のフロー。この用語はもっとよく知られている場合は、コールバック、と呼ばれています。

+0

nice :) +1 – Kuf

関連する問題