首页 > 解决方案 > 如何在没有写入所有目录的情况下在 python 中压缩文件

问题描述

我试图压缩多个文件,但是当我打开 zip 文件时,我遇到了一个奇怪的问题,所有指向这些文件的目录也都列出了 home/site/Uploads/test/

这是我写的python代码

import os
import zipfile

zf = zipfile.ZipFile("myzipfile.zip", "w")
for dirname, subdirs, files in os.walk("D:/home/site/Uploads/test/"):
zf.write(dirname)
for filename in files:
    zf.write(os.path.join(dirname, filename))
zf.close()

压缩文件很好,但为什么还要列出所有其他目录。

我得到了这样的 zip 文件-->home-->site-->Uploads-->test-->file.txt 我想要的是这个-->file.txt

标签: pythondirectoryzip

解决方案


让我们假设以下目录结构:

./uploads
└── foo
    └── bar
        ├── 1.txt
        └── baz
            └── 2.txt

您只需要正确设置 arcname:

import os
import zipfile

zf = zipfile.ZipFile("myzipfile.zip", "w")
for dirname, subdirs, files in os.walk("/tmp/uploads"):
    for filename in files:
        zf.write(os.path.join(dirname, filename), arcname=filename)
zf.close()

解压缩显示 zip 文件,如下所示:

unzip -l myzipfile.zip                                                                                                                    Archive:  myzipfile.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  10-21-2019 15:03   1.txt
        0  10-21-2019 15:03   2.txt
---------                     -------
        0                     2 files

推荐阅读