将变量构建到python zip脚本中

时间:2012-11-19 22:24:45

标签: python zip archive

在开始之前,我正在尝试创建一个python zip脚本,它将获取target_dir的快照,压缩它,将其保存在temp文件夹中,并为其指定“now”变量。这是我的代码:

#!/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:])

我无法弄清楚如何让这一行改为使用变量“now”和“temp_dir”而不是硬编码目的地:

zip = zipfile.ZipFile('/tmp/example.zip', 'w', zipfile.ZIP_DEFLATED)

我想我想要这样的东西(伪代码):

zip = zipfile.ZipFile('<temp_dir>/<now>.zip', 'w', zipfile.ZIP_DEFLATED)

有谁能告诉我应该怎么做?

3 个答案:

答案 0 :(得分:2)

简而言之,os.path.join(temp_dir, now + '.zip'),但我不确定这是否真的是你所要求的。因为我不确定你怎么能得到你所拥有的并且被困在这里。

答案 1 :(得分:1)

Python字符串格式化允许您将变量的内容放入字符串中,即

zip = zipfile.ZipFile('%s/%s.zip' % (temp_dir, now), 'w', zipfile.ZIP_DEFLATED)

字符串格式化在格式化运算符%之后用元组中的字符串替换“%s”的出现。

或者(更干净),使用稍后在代码中使用的os.path.join

zip = zipfile.ZipFile(os.path.join(temp_dir, now+".zip"), 'w', zipfile.ZIP_DEFLATED)

os.path.join是一个函数,它根据文件系统使用的逻辑将文件系统路径的元素粘合在一起,因此在使用的操作系统中使用\代替/路径中的那个角色。字符串连接只是+,因此要将结束.zip的文件粘贴到另一个字符串nownow+".zip"就可以了。

答案 2 :(得分:0)

您还可以使用shutil中的更高级别功能:

>>> import shutil
>>> from time import strftime
>>> now = strftime("%Y-%m-%d_%H-%M")
>>> shutil.make_archive('/tmp/file_%s' % now, 'zip', '/usr/games/')
'/tmp/file_2012-11-19_22-43.zip'