我可以通过将type=argparse.FileType()
更改为某种gzip类型来直接使用argparse打开gzip文件吗?它不在文档中,所以我不确定argparse是否支持压缩文件类型......
答案 0 :(得分:3)
首先,type
参数是将字符串转换为其他内容的函数或其他可调用函数。就是这样。
argparse.FileType
是工厂类,最终会做一些接近的事情:
def filetype(astring):
mode = 'r' # or 'w' etc.
try:
f = open(astring, mode)
except IOError:
raise argparse.ArgumentError('')
return f
换句话说,它将字符串从命令行转换为打开的文件。
您可以编写一个类似的type
函数来打开zipped
文件。
FileType
只是一种便利,是一个如何编写自定义类型函数或类的示例。这对于获取输入文件,执行某些操作以及写入输出文件的小脚本程序来说非常方便。它还处理'-'
参数,就像shell程序处理stdin / out一样。
type
的缺点是它会打开一个文件(如果写入模式会创建),但不提供自动关闭。您必须这样做,或等待脚本结束并让解释器执行此操作。无论您是否需要,都会创建一个“默认”输出文件。
因此,更安全的方法是接受文件名,可能需要进行一些测试,然后使用您自己的with
上下文进行打开/关闭。当然你也可以使用gzip文件来做到这一点。
答案 1 :(得分:3)
gzip.open
也接受一个打开的文件而不是文件名,因此只需将argparse
打开的文件对象传递给gzip.open
,即可获得一个类文件对象来读取未压缩的数据。
答案 2 :(得分:0)
不,除非你添加一个标志来指示文件类型,否则argparse没有文件类型的概念。
另一方面,你可以使用python的gzip lib和try块来读取文件。