Input openbook=hook\u压缩的文件输入用法

Input openbook=hook\u压缩的文件输入用法,input,compression,Input,Compression,我正在尝试fileinput来读取一些压缩文件,我尝试了以下三种方法,但是,它们都不起作用 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 enu

我正在尝试fileinput来读取一些压缩文件,我尝试了以下三种方法,但是,它们都不起作用

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'))):
对于第一个命令,错误如下所示:

'module' object is not callable
对于第三个命令,错误如下:

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
回溯(最近一次呼叫最后一次):
文件“read_File.py”,第15行,在
对于i,枚举中的行(fileinput.input(openhook=fileinput.hook\u compressed(file1,'r')):
文件“/share/lib/python2.6/fileinput.py”,第103行,输入
_状态=文件输入(文件、就地、备份、bufsize、模式、openhook)
文件“/share/lib/python2.6/fileinput.py”,第230行,在__
raise ValueError(“FileInput openhook必须可调用”)
ValueError:FileInput openhook必须是可调用的
我不明白为什么openhook不能在这里调用

有人能帮我吗?
thx

您应该将函数对象作为钩子参数传入,而不是调用函数

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()
除此之外,这种用法相对少见,但肯定是钩子变量的规范(事实上,钩子变量的整个要点——它们提供了一个“钩子”,您可以将自己的函数放在另一个类或函数的流中。如果这个术语更熟悉的话,它们也被称为回调)

function()