Python压缩整个目录而非单个文件

1 投票
1 回答
620 浏览
提问于 2025-04-16 20:28

我写了一个Python脚本,用来在自动化工具中压缩文件。问题是,当我压缩文件时,整个目录(也就是所有的文件夹)和文件都被压缩了,而我只想压缩文件本身。比如,如果我在桌面上运行这个脚本,给它传两个文件,test1和test2,输出的压缩文件会是“当前日期和时间.zip”,解压后会变成这样:/Users/dean/desktop/test1 /Users/dean/desktop/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)

1 个回答

2

在你的for循环中,不要这样写 -

zf.write(f)

试试这样写 -

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

撰写回答