Python:创建一个目录中所有以“.json”结尾的文件的zip文件

Python: Create a zip file of all files ending with ".json" in a directory

假设目录是 /Home/Documents/Test_files。

我想为所有以“.json”结尾的文件创建一个 zip 文件,如果可能,删除这些文件,只留下 zip 文件

到目前为止,我已经能够为给定路径中的所有文件创建一个 zip 文件,但是当我使用行 zipf.write(file) 时,它会抛出错误“[Errno 2] 没有这样的文件或目录: sample.json”。但是,当我使用 zipf.write(os.path.join(root, file)) 时,它确实会写入文件,但也会写入我不想要的整个目录路径。

我只想自己写文件。当我使用 print file 时,似乎打印了正确的文件,所以我不知道为什么我收到文件不存在的错误消息

目前我的代码是这样的:

def create_zip(path,zipf):
    #path is the directory address (i.e. /Home/Documents/Test_files)
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(".json"):
                print file
                zipf.write(os.path.join(root, file))
                #zipf.write(file)

我也想remove/delete创建zip文件后的文件保存space。

任何关于为什么会发生这种情况的帮助将不胜感激!

您可以 chdir 在将其添加到 zip 文件之前不包括整个目录路径,然后使用 os.remove 删除文件:

def create_zip(path,zipf):
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(".json"):
                chdir(root)
                zipf.write(file)
                os.remove(file)

如果您正在使用 Python 的 ZipFile 模块,您只需指定参数

arcname = archive name

在 write() 方法中,如:

    import os
    from zipfile import ZipFile

    def create_zip(path,zipf):
        #path is the directory address (i.e. /Home/Documents/Test_files)
        for root, dirs, files in os.walk(path):
            for file in files:
                if file.endswith(".json"):
                    print file
                    zipf.write(os.path.join(root, file), arcname=file)
                    os.remove(os.path.join(root, file))