新手需要Python教程的帮助

新手需要Python教程的帮助,python,Python,我是一个新手,正在学习python(3.0)的一个字节。这是我使用过的第一种编程语言。我被困在一个点上,你做一个简单的程序,创建一个备份zip文件(第75页)。我正在用Python3.1运行Windows7(64位)。在此之前,我安装了GNUWin32+源代码,并将C:\ProgramFiles(x86)\GNUWin32\bin添加到我的Path环境变量中。以下是节目: #!C:\Python31\mystuff # Filename : my_backup_v1.py import os

我是一个新手,正在学习python(3.0)的一个字节。这是我使用过的第一种编程语言。我被困在一个点上,你做一个简单的程序,创建一个备份zip文件(第75页)。我正在用Python3.1运行Windows7(64位)。在此之前,我安装了GNUWin32+源代码,并将C:\ProgramFiles(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_命令,以查看该命令是否至少有效:

>>> zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b
SyntaxError: invalid syntax (<pyshell#17>, line 1)
>>zip-qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b
SyntaxError:无效语法(,第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模块的帮助:
类zip(对象)
|zip(iter1[,iter2[…])-->zip对象
|  
|返回一个zip对象,其.\uuuuuuuuuuuuuuuuu next()方法返回一个元组,其中
|第i个元素来自第i个iterable参数。下一个
|方法继续,直到参数序列中最短的iterable
|耗尽,然后引发StopIteration。
|  
|此处定义的方法:
|  
|_uuugetAttribute_uuuu(…)
|x.uuu getattribute_uuuu('name')x.name
|  
|_uuuiter_uuuuuuuuu(…)
|x.国际热核聚变实验堆(x)
|  
|下一个…)
|x.uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
|  
|  ----------------------------------------------------------------------
|此处定义的数据和其他属性:
|  
|新的
|T.。\uuuu new\uuuuu(S,…)->类型为S的新对象,是T的子类型
不幸的是,我还不能真正理解“帮助”。不过,我对zip函数进行了一些研究,看看它是如何工作的

>>> zip (r'C:AB\a')
<zip object at 0x029CE8C8>
zip(r'C:AB\a')
因此,zip函数似乎可以工作,但我想我没有正确地使用它。请帮助我,记住我还没有太多的编程经验。如果您想查看本教程,请访问www.swaroopch.com/notes/Python

这并不是为shell命令
zip
提供帮助,而是为python函数
zip
提供帮助,它与zip文件压缩无关。

原因“
zip-qr C:\Backup\2010010614330.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”并按enter键),以查看其是否有效;不是pythonshell。

一些改进建议:

使用
子流程.call([command',arg',arg',arg'])
命令调用外部zip命令。这将确保正确调用命令并正确转义数据

使用
os.path.join
将路径组件干净地连接在一起。这也将有助于防止细微的错误

在python中尝试zip命令之前,请确保它在命令提示符下工作

--

除此之外,它看起来还不错

PS.
zip()
是一个内置项,用于连接两个可编程项。不用于压缩文件


重要提示:请参阅安德鲁的评论(复制到此处供参考):

看起来您应该在终端提示符而不是python提示符下执行
zip-qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b
。这有帮助吗?——安德鲁·麦格雷戈3分钟前

>>> 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中…

看起来您应该在终端提示符而不是python提示符下执行
zip-qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b
。这有帮助吗?是的,C:AB\a和C:\AB\b存在。它们是我创建的小文件夹。好的,python中的zip函数与我在这里应该使用的zip是分开的。在这种情况下,我需要做什么才能让操作系统使用zip命令?如果有帮助的话,我已经安装了7zip&GNUWin32。
os.system(zip\u命令)
应该可以工作,就像您在代码中所做的那样。在Windows命令提示符下尝试该命令(zip-qr C:…等)(将说明编辑到我的帖子中)。确定在Windows命令提示符下尝试了该命令,但未工作错误消息:“zip”未被识别为内部或外部命令可操作程序或批处理文件。那么现在呢?这意味着Windows找不到“zip”。仔细检查你的路径变量,检查你所说的添加到路径中的bin文件夹,确保其中有一个“zip”程序。让它工作起来,我想我输入的路径变量是错误的。我将路径复制粘贴到path变量中,现在可以使用了,谢谢!复制粘贴到shell输出中的值是1,所以我猜这意味着它成功了?但我没有看到备份文件。我尝试将其复制到命令提示符,似乎操作系统出于某种原因无法识别命令“zip”。我还不熟悉subprocess.call,所以我必须仔细阅读如何使用它来调用zip命令。