直接用argparse打开压缩文件

Open compressed file directly with argparse

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

不,argparse 没有文件类型的概念,除非你添加一个标志来指示文件类型。

另一方面,您可以使用 python 的 gzip lib 和 try 块来读取文件。

首先,type 参数是一个函数或其他可将字符串转换为其他内容的可调用对象。就这些了。

argparse.FileType 是工厂 class,最终做的事情接近于:

def filetype(astring):
    mode = 'r' # or 'w' etc.
    try:
        f = open(astring, mode)
    except IOError:
        raise argparse.ArgumentError('')
    return f

换句话说,它将命令行中的字符串转换为打开的文件。

您可以编写一个类似的 type 函数来打开 zipped 文件。

FileType 只是为了方便,以及如何编写自定义类型函数或 class 的示例。对于接受输入文件、执行某些操作并写入输出文件的小型脚本程序来说,这是一种便利。它还处理 '-' 参数,与 shell 程序处理 stdin/out.

的方式相同

type 的缺点是它打开一个文件(如果写入模式则创建),但不提供自动关闭。您必须这样做,或者等待脚本结束并让解释器执行该操作。并且无论您是否需要,都会创建一个 'default' 输出文件。

因此,更安全的方法是接受文件名,可能需要进行一些测试,然后使用您自己的 with 上下文执行 open/close。当然,您也可以使用 gzip 文件来做到这一点。

gzip.open 也接受打开的文件而不是文件名,所以只需将 argparse 打开的文件对象传递给 gzip.open 即可获得读取未压缩文件的类文件对象数据。