让我们说目录是/ 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文件后删除/删除文件以节省空间。
任何帮助,为什么会发生这种情况将不胜感激!
答案 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))