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

时间:2016-04-20 10:15:22

标签: python zip

让我们说目录是/ Home / Documents / Test_files。

我想创建一个以" .json"结尾的所有文件的zip文件。如果可能的话,删除文件以便只保留zip文件

到目前为止,我已经能够创建给定路径中所有文件的zip文件,但是当我使用行$startDate = Carbon::now()->startOfWeek(); $endDate = Carbon::now()->endOfWeek(); //Init interval $dateInterval = \DateInterval::createFromDateString('1 day'); //Init Date Period from start date to end date //1 day is added to end date since date period ends before end date. See first comment: http://php.net/manual/en/class.dateperiod.php $dateperiod = new \DatePeriod($startDate, $dateInterval, $endDate); return View::make('backend/menubuilder/edit')->with('id',$id)->withDateperiod($dateperiod); 时,它会抛出错误" [Errno 2]没有这样的文件或目录:sample.json"。但是,当我使用zipf.write(file)时,它会写入文件,但也会写出我不想要的整个目录路径。

我只想自己编写文件。当我使用zipf.write(os.path.join(root, file))时,似乎打印了正确的文件,因此我不知道为什么我会收到该文件不存在的错误

目前我的代码如下:

print file

我还想在创建zip文件后删除/删除文件以节省空间。

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

2 个答案:

答案 0 :(得分:2)

您可以在将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)

答案 1 :(得分:1)

如果您使用的是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))