使用argparse直接打开压缩文件

时间:2015-11-10 01:24:01

标签: python gzip argparse

我可以通过将type=argparse.FileType()更改为某种gzip类型来直接使用argparse打开gzip文件吗?它不在文档中,所以我不确定argparse是否支持压缩文件类型......

3 个答案:

答案 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块来读取文件。