在 Python 中使用 7zip 备份文件

在 Python 中使用 7zip 备份文件

我在按照 Byte of python一步步的学习Python, 在学到‘解决方案’的时候,原文的实例 “backup_ver1.py” 是用zip备份文件。

这里面我有几点不一样的地方:

  • 我的电脑没有zip,我用的是7zip;
  • 原文直接用‘zip’命令备份,我直接使用7z命令报错。

使用7z命令备份之前,需要把7zip的安装目录添加到系统环境变量Path中;这时候我可以在CMD中执行7z,但是在python中还是报错,“7z is not recognized as an internal ……”

下面三种方法可以在python中正确运行7z命令:

# 方法1: 拷贝 7z.exe 和7z.dll 到当前python文件所在的目录下。 否则,不认识7z 命令。
zip_command = '7z a -tzip {0} {1} -r'.format(target, ' '.join(source))

# 方法2: os.system() 里面执行的是同目录下的exe, 使用如下os.chdir() 命令切换 path。
os.chdir('D:\\Program Files (x86)\\7-Zip')
print('切换当前路径为:', os.getcwd())
zip_command = '7z a -tzip {0} {1} -r'.format(target, ' '.join(source))

# 方法3:在cmd 命令中写入7z.exe所在的目录
zip_command = '"D:\\Program Files (x86)\\7-Zip\\7z.exe" a -tzip {0} {1}, -r'.format(target, ' '.join(source))

import os
import time

# 1. 需要备份的文件与目录将被指定在一个列表中。
# 例如在 Windows 下:source = ['"C:\\My Documents"', 'C:\\Code']
# 又例如在 Mac OS X 与 Linux 下:source = ['/Users/swa/notes']
source = ['D:\\test\\fold']
# 在这里要注意到我们必须在字符串中使用双引号用以括起其中包含空格的名称。

# 2. 备份文件必须存储在一个主备份目录中
# 例如在 Windows 下:target_dir = 'E:\\Backup'
# 又例如在 Mac OS X 和 Linux 下:target_dir = '/Users/swa/backup'
target_dir = 'D:\\Backup'
# 要记得将这里的目录地址修改至你将使用的路径

# 3. 备份文件将打包压缩成 zip 文件。
# 4. zip 压缩文件的文件名由当前日期与时间构成。
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'

# 如果目标目录还不存在,则进行创建
if not os.path.exists(target_dir):
    os.mkdir(target_dir)

# 5. 我们使用 zip 命令将文件打包成 zip 格式
# 方法1: 拷贝 7z.exe 和7z.dll 到当前python文件所在的目录下。 否则,不认识7z 命令。
# zip_command = '7z a -tzip {0} {1} -r'.format(target, ' '.join(source))

# 方法2: os.system() 里面执行的是同目录下的exe, 使用如下os.chdir() 命令切换 path。
# os.chdir('D:\\Program Files (x86)\\7-Zip')
# print('切换当前路径为:', os.getcwd())
# zip_command = '7z a -tzip {0} {1} -r'.format(target, ' '.join(source))

# 方法3:在cmd 命令中写入7z.exe所在的目录
zip_command = '"D:\\Program Files (x86)\\7-Zip\\7z.exe" a  -tzip {0} {1}, -r'.format(target, ' '.join(source))


# 运行备份
print('Zip command is:')
print(zip_command)
print('Running:')


if os.system(zip_command) == 0:
    print('Successful backup to', target)
else:
    print('Backup FAILED')
 

猜你喜欢

转载自blog.csdn.net/zzphapy/article/details/81502837