Python - 使用zipfile模块压缩目录中的所有文件

时间:2017-01-03 20:27:09

标签: python zipfile

我尝试使用python zipfile模块压缩文件夹中的所有文件(该文件夹没有任何子目录),但似乎无法获得所需的输出。

folderA坐在F:\Projects\ProjectA\Folders\folderA and my script under F:\Projects\ProjectA\CodeA\zipcode.py下面。我想压缩folderA中的所有文件,以便生成的zip文件在folderA.zip下以F:\Projects\ProjectA\Folders命名,并带有原始文件名。

唯一的问题是解压缩结果会产生Folders \ folderA而不仅仅是folderA。它与folderA到脚本的相对路径有关,但我似乎无法获得所需的结果。

#zipcode.py
import os
import zipfile

filepath = "F:/Projects/ProjectA/Folders/folderA"

archive = zipfile.ZipFile(os.path.abspath(filepath) + '.zip', 'w')

for root, dirs, files in os.walk(filepath):
        for afile in files:
            archive.write(os.path.relpath(os.path.join(root, afile)))
        archive.close()

1 个答案:

答案 0 :(得分:0)

在循环中,使用 pwm: pwm@7e20c000 { compatible = "brcm,bcm2835-pwm"; reg = <0x7e20c000 0x28>; clocks = <&clocks BCM2835_CLOCK_PWM>; assigned-clocks = <&clocks BCM2835_CLOCK_PWM>; assigned-clock-rates = <10000000>; #pwm-cells = <2>; status = "disabled"; }; 参数更改归档成员的名称:

arcname

其中

archive.write(os.path.join(root, afile),arcname=name_in_archive)

保留name_in_archive = os.path.join(os.path.basename(filepath),afile) 路径。

我不确定(取决于python的版本)的一件事是你可能不得不用斜杠替换windows反斜杠,因此.zip文件是可移植的。不伤害:

folderA

请注意,由于我们完全控制了档案中文件的名称,因此我暂时不需要archive.write(os.path.join(root, afile),arcname=name_in_archive.replace(os.sep,"/")) 来电。

另请注意,无需在打开存档时转换为绝对路径。 os.path.relpath找到文件,如果它是相对的,如果它是绝对的:

open

可以写成

archive = zipfile.ZipFile(os.path.abspath(filepath) + '.zip', 'w')