我是一个通过python(3.0)字节的新手。这是我用过的第一种编程语言。我陷入了制作一个创建备份zip文件的简单程序的地步(第75页)。我用python 3.1运行Windows 7(64位)。在此之前,我安装了GNUWin32 +源,并将C:\ Program Files(x86)\ GnuWin32 \ bin添加到我的Path环境变量中。这是该计划:
#!C:\Python31\mystuff
# Filename : my_backup_v1.py
import os
import time
# backing up a couple small files that I made
source = [r'C:\AB\a', r'C:\AB\b']
#my back up directory
target_dir = 'C:\\Backup'
#name of back up file
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'
zip_command = "zip -qr {0} {1}".format(target,' '.join(source))
print(zip_command)
if os.system(zip_command) == 0:
print('Successful backup to', target)
else:
print('Backup failed!')
print('source files are', source)
print('target directory is', target_dir)
print('target is', target)
输出:
zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b
Backup failed!
source files are ['C:\\AB\\a', 'C:\\AB\\b']
target directory is C:\Backup
target is C:\Backup\20100106143030.zip
教程包含一些故障排除建议:在python shell提示符中复制并粘贴zip_command以查看该至少是否有效:
>>> zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b
SyntaxError: invalid syntax (<pyshell#17>, line 1)
由于这不起作用,教程说要阅读GNUWin32手册以获得更多帮助。我仔细研究过,还没有看到任何可以帮助我的东西。要查看zip功能是否正常,我确实提供了帮助(zip)并获得了以下内容:
>>> help(zip)
Help on class zip in module builtins:
class zip(object)
| zip(iter1 [,iter2 [...]]) --> zip object
|
| Return a zip object whose .__next__() method returns a tuple where
| the i-th element comes from the i-th iterable argument. The .__next__()
| method continues until the shortest iterable in the argument sequence
| is exhausted and then it raises StopIteration.
|
| Methods defined here:
|
| __getattribute__(...)
| x.__getattribute__('name') <==> x.name
|
| __iter__(...)
| x.__iter__() <==> iter(x)
|
| __next__(...)
| x.__next__() <==> next(x)
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __new__ = <built-in method __new__ of type object at 0x1E1B8D80>
| T.__new__(S, ...) -> a new object with type S, a subtype of T
不幸的是,我还不能真正理解'帮助'。不过我用zip功能玩了一下,看看它是如何工作的。
>>> zip (r'C:AB\a')
<zip object at 0x029CE8C8>
所以看起来zip功能有效,但我想我没有正确使用它。请帮帮我,记住我还没有太多的编程经验。如果您想查看本教程,可以在www.swaroopch.com/notes/Python上找到它。
答案 0 :(得分:2)
>>> zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b
听起来像是一个你应该在操作系统的shell中输入的命令,而不是在python的shell中。也许你可以试试
os.system('zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b')
在python shell中......
答案 1 :(得分:1)
那不是给你shell命令zip
的帮助,它为你提供了python函数zip
的帮助,这与zip文件压缩无关。
答案 2 :(得分:1)
“zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b
”在提示符处失败的原因是因为在这种情况下,“zip”应该是您发送操作系统的命令...与Python无关。
这有点令人困惑,我担心 - 当你做“zip(r'C:AB\a')
”时,你使用的是Python的内置zip()
功能,这与你想要做的事情无关
你有正确的目录结构吗?我的意思是,C:\ AB \ a和C:\ AB \ b是否存在?
编辑 - 你应该将那条长“zip”行复制/粘贴到命令提示符下(点击windows键+ R,然后输入“cmd”并点击回车),看它是否有效;不是Python shell。
答案 3 :(得分:1)
您可以使用以改善的一些建议:
使用subprocess.call([command', 'arg', 'arg', 'arg'])
命令调用外部zip命令。这将确保在正确转义数据的情况下正确调用该命令。
使用os.path.join
干净地将路径组件连接在一起。这也有助于防止细微的错误。
在python中尝试之前,请确保zip命令在命令提示符下运行。
-
除此之外,它看起来还不错。
PS。 zip()
是内置函数,用于连接两个迭代。不是为了压缩文件。
重要提示:请参阅Andrew的评论(此处复制以供参考):
看起来你应该在终端提示符下完成zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b
,而不是python提示符。这有帮助吗? - Andrew McGregor 3分钟前