直接用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
即可获得读取未压缩文件的类文件对象数据。
我可以通过将 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
即可获得读取未压缩文件的类文件对象数据。