Before I start, I am trying to create a python zip script which will take a snapshot of the target_dir, zip it, save it in the temp folder and give it the filename of “now” variable. This is the code I have:
#!/usr/bin/env python
import os
import sys
import datetime
now = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M")
target_dir = '/var/lib/data'
temp_dir='/tmp'
zip = zipfile.ZipFile('/tmp/example.zip', 'w', zipfile.ZIP_DEFLATED)
rootlen = len(target_dir) + 1
for base, dirs, files in os.walk(target_dir):
for file in files:
fn = os.path.join(base, file)
zip.write(fn, fn[rootlen:])
I can’t figure out how to get this line to instead use the variable “now” and “temp_dir” instead of hardcoding the destination:
zip = zipfile.ZipFile('/tmp/example.zip', 'w', zipfile.ZIP_DEFLATED)
I guess I want something like this (pseudo code):
zip = zipfile.ZipFile('<temp_dir>/<now>.zip', 'w', zipfile.ZIP_DEFLATED)
Can anyone show me how this should be done?
Python string formating lets you put the content of variables into strings, that would be
String formating replaces the occurences of “%s” with the strings in the tuple after the formating operator
%.Alternatively (and cleaner), use the same
os.path.joinyou use later in your code:os.path.join is a function that glues together elements of a file system path according to whatever logic your file system uses, so it would use
\instead of/in operating systems that use that character in paths. String concatenation is just+, so to glue the file ending.zipto another stringnow,now+".zip"just does the trick.