Python 压缩整个目录而不是单个文件

标签 python directory zip compression automator

我编写了一个 python 脚本,在 automator 中使用它来压缩文件。问题是,当我压缩它们时,整个目录(意味着所有文件夹)+文件被压缩,而不仅仅是文件本身。因此,如果我在桌面上运行它,并使用两个文件作为参数,test1 和 test2,输出将是“Currentdate&time.zip”,当我解压它时。它看起来像这样/Users/dean/desktop/test1 /用户/院长/桌面/test2

所以当我想要的只是文件时它会压缩所有这些文件夹。请帮忙

当从终端运行时,此代码效果很好,但在自动机中则不然(我的评论在下面),我使用此代码作为自动机中的服务。所以一个文件就可以正常工作。多个文件不顺便说一句 len(sys.argv)>3 应该是 len(sys.argv)>1

OSX_username = getpass.getuser()
now = datetime.datetime.today()
dir = os.getcwd()
zip_dir = dir + "/" + now.strftime("%Y-%m-%d %H:%M") + '.zip'
dst_dir = "/Users/" + OSX_username + "/Desktop"
zf = zipfile.ZipFile(now.strftime("%Y-%m-%d %H:%M") + '.zip', mode='w')

if len(sys.argv) > 3: #app 2 service 3
    for f in sys.argv[1:]:
        try:
            zf.write(f)
        finally:
            print ''
    zf.close()
    src = zip_dir
    last_part = os.path.basename(src)
    shutil.move(src, dst_dir)

最佳答案

在你的 for 循环中,而不是这个 -

zf.write(f)

试试这个 -

zf.write(f, os.path.basename(f), zipfile.ZIP_DEFLATED)

关于Python 压缩整个目录而不是单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6511548/

相关文章:

Python 打包依赖

file - 如果存在同名文件夹,则无法创建文件

c++ - 使用ros launch创建一个目录,然后将它的路径传递给不同的节点

c# - 使用 Ionic Zip 库将文件夹添加到 Zip 根目录

python - 在 python 中添加二进制数需要帮助

python - 我正在尝试使用谷歌应用程序引擎(python)来保存带有 # 字符的网址

python - copy.deepcopy 还是创建一个新对象?

Python:将目录结构树表示为列表的列表

php - 如何使用 PHP 创建 ZIP 文件并在用户下载后将其删除?

java - 如何从 Java 中的字节数组创建 Zip 文件