新手需要Python教程的帮助

时间:2010-01-07 00:14:30

标签: python

我是一个通过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上找到它。

4 个答案:

答案 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分钟前