覆盖以前提取的文件而不是创建新文件

2024-06-16 11:41:25 发布

您现在位置:Python中文网/ 问答频道 /正文

有一些库用于通过Python提取归档文件,如gzip、zipfile library、rarfile、tarfile、patool等。我发现其中一个库(patool)特别有用,因为它具有跨格式特性,可以提取几乎任何类型的归档文件,包括最流行的压缩包、gzip、TAR和拉尔。

要使用patool提取存档文件,非常简单:

patoolib.extract_archive( "Archive.zip",outdir="Folder1")

其中,"Archive.zip"是存档文件的路径,"Folder1"是将存储提取文件的目录的路径。

提取效果很好。问题是,如果我对完全相同的存档文件再次运行相同的代码,则相同的提取文件将存储在同一文件夹中,但名称略有不同(第一次运行时为file name,第二次运行时为filename1,第三次运行时为filename11,依此类推)。

相反,如果目录中已存在同名文件,则需要代码覆盖提取的文件。

这个extract_archive函数看起来很小-它只有这两个参数,一个是verbosity参数,一个是program参数,指定要用它提取存档文件的程序。

编辑: Nizam Mohamed的回答记录了extract_archive函数实际上正在覆盖输出。我发现这是部分正确的-该函数覆盖ZIP文件,但不是GZ文件,这是我追求的。对于GZ文件,该函数仍会生成新文件。

编辑 帕德雷克坎宁安的回答建议使用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有不同的名称。


Tags: 文件to函数代码参数extractoutextracting