【发布时间】:2015-06-20 07:49:12
【问题描述】:
有一些库用于通过 Python 提取存档文件,例如 gzip、zipfile 库、rarfile、tarfile、patool 等。我发现其中一个库 (patool) 由于其跨格式功能而特别有用从某种意义上说,它可以提取几乎任何类型的存档,包括最流行的存档,例如 ZIP、GZIP、TAR 和 RAR。
使用 patool 提取存档文件非常简单:
patoolib.extract_archive( "Archive.zip",outdir="Folder1")
其中"Archive.zip" 是存档文件的路径,"Folder1" 是存储解压文件的目录路径。
提取工作正常。问题是,如果我为完全相同的存档文件再次运行相同的代码,相同的提取文件将存储在同一个文件夹中,但名称略有不同(第一次运行时的文件名,第二次运行时的文件名 1,文件名 11 在第三个等等。
如果目录中已经存在同名文件,我需要代码覆盖提取的文件。
这个extract_archive 函数看起来非常小——它只有这两个参数,一个verbosity 参数和一个program 参数,用于指定您要用来提取档案的程序。
修改:
Nizam Mohamed 的回答记录了 extract_archive 函数实际上正在覆盖输出。我发现这部分正确 - 该函数覆盖 ZIP 文件,但不是我所追求的 GZ 文件。对于 GZ 文件,该函数仍会生成新文件。
修改 Padraic Cunningham 的回答建议使用 master source 。因此,我下载了该代码并将旧的 patool 库脚本替换为链接中的脚本。结果如下:
os.listdir()
Out[11]: ['a.gz']
patoolib.extract_archive("a.gz",verbosity=1,outdir=".")
patool: Extracting a.gz ...
patool: ... a.gz extracted to `.'.
Out[12]: '.'
patoolib.extract_archive("a.gz",verbosity=1,outdir=".")
patool: Extracting a.gz ...
patool: ... a.gz extracted to `.'.
Out[13]: '.'
patoolib.extract_archive("a.gz",verbosity=1,outdir=".")
patool: Extracting a.gz ...
patool: ... a.gz extracted to `.'.
Out[14]: '.'
os.listdir()
Out[15]: ['a', 'a.gz', 'a1', 'a2']
因此,extract_archive 函数在每次执行时都会创建新文件。在a.gz 下存档的文件实际上与a 的名称不同。
【问题讨论】:
-
@nathanhayfield,不先解压怎么知道文件名?
-
好点,我的错误
-
patool (1.7)覆盖。 -
@NizamMohamed 你确定吗?我有 patoolib 1.7 版,它不会覆盖。
标签: python file extract overwrite ziparchive