将变量构建到 python zip 脚本中

Posted

技术标签:

【中文标题】将变量构建到 python zip 脚本中【英文标题】:Build variable into python zip script 【发布时间】:2012-11-19 22:24:45 【问题描述】:

在开始之前,我正在尝试创建一个 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)

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

【问题讨论】:

【参考方案1】:

简而言之,os.path.join(temp_dir, now + '.zip'),但我不确定这是否真的是您要问的。因为我不知道你是怎么做到的,却被困在这里。

【讨论】:

我一直在尝试以其他人的示例代码为基础,因此我无法声明其中的大部分内容,我正在努力使其适用于我的应用程序。 我已经尝试实现你的代码,你能看看我是否做得正确吗? gist.github.com/4114493【参考方案2】:

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" 就可以了。

【讨论】:

【参考方案3】:

您也可以使用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'

【讨论】:

以上是关于将变量构建到 python zip 脚本中的主要内容,如果未能解决你的问题,请参考以下文章

VSTS:将构建/发布变量传递到 Powershell 脚本任务

如何在我的 Powershell 脚本中使用 Jenkins 变量

python脚本将变量发送到wix源路径

我需要将变量从python脚本传递到远程服务器

在 Xcode 构建阶段运行脚本中设置全局环境变量

将python脚本的输出返回到bash变量[重复]