Python调用zip命令正确操作方法解析

开发 后端
我们今天将会在这里为大家详细介绍一下有关Python调用zip命令的操作方法,以及在实际使用出现问题的解决方法,希望可以给大家带来些帮助。

当我们在应用Python编程语言进行程序开发的时候,我们会发现这一语言可以帮助我们轻松的完成一些特定的功能需求。在这里我们就先一起来了解一下Python调用zip命令的使用方法,以此了解这一语言的操作方法。

Python调用zip命令例子程序是这样的:

 

  1. #!/usr/bin/Python  
  2. # Filename: backup_ver1.py  
  3. import os  
  4. import time  
  5. # 1. The files and directories to be backed up are specified in a list.  
  6. source = ['/home/swaroop/byte', '/home/swaroop/bin']  
  7. # If you are using Windows, use source = [r'C:\Documents', r'D:\Work'] 
    or something like that  
  8. # 2. The backup must be stored in a main backup directory  
  9. target_dir = '/mnt/e/backup/' # Remember to change this to what 
    you will be using  
  10. # 3. The files are backed up into a zip file.  
  11. # 4. The name of the zip archive is the current date and time  
  12. target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.zip'  
  13. # 5. We use the zip command (in Unix/Linux) to put the files 
    in a zip archive  
  14. zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))  
  15. # Run the backup  
  16. if os.system(zip_command) == 0:  
  17. print 'Successful backup to', target  
  18. else:  
  19. print 'Backup FAILED' 

 

由于上面Python调用zip命令例子是在Unix/Linux下的,需要改成windows

 

  1. #!/usr/bin/Python  
  2. # Filename: backup_ver1.py  
  3. import os  
  4. import time  
  5. source =[r'C:\My Documents', r'D:\Work']  
  6. target_dir = r'F:\back up\' # Remember to change this to 
    what you will be using  
  7. target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.zip'  
  8. zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))  
  9. # Run the backup  
  10. if os.system(zip_command) == 0:  
  11. print 'Successful backup to', target  
  12. else:  
  13. print 'Backup FAILED' 

 

问题一:

当改好后,运行会发生异常,提示:"EOL while scanning single-quoted string",该异常出现在上面代码的粗体行

  1. target_dir = r'F:\back up\' 

在Python调用zip命令中,发生错误主要是因为转义符与自然符号串间的问题,看Python的介绍:#t#

自然字符串

如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。例如r"Newlines are indicated by /n"。

如上所说, target_dir的值应该被视作 'F:\back up\',可是这里的转义符却被处理了。如果换成 r'F:\\back up\\' 转义符却没被处理,于是target_dir的值变为'F:\\back up\\'.将单引号变成双引号,结果还是如此。而如果给它加中括号【】,变成【r'F:\back up\'】,则程序又没问题...

于是,解决方法有2个:1)如上所说,加中括号;2)不使用前缀r,直接用转义符‘\’,定义变成target_dir = 'F:\\back up\\'.

问题二:

解决完问题一后,运行module,会提示backup fail. 检查如下:

1. 于是试着将source和target字符串打印出来检验是否文件路径出错,发现没问题

2. 怀疑是windows没有zip命令,在命令行里打‘zip’, 却出现提示帮助,证明可以用zip命令,而且有参数q,r;

3. 想起sqlplus里命令不接受空格符,于是试着将文件名换成没空格的, module成功运行...

现在问题换成如何能让zip命令接受带空格路径,google了一下,看到提示:“带有空格的通配符或文件名必须加上引号”

于是对 zip_command稍做修改,将

zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))

改成:

zip_command = "zip -qr \"%s\" \"%s\"" % (target, '\" \"'.join(source))

改后,module成功运行...

正确的script应为:

 

  1. #!/usr/bin/Python  
  2. # Filename: backup_ver1.py  
  3. import os  
  4. import time  
  5. source =[r'C:\My Documents', r'D:\Work']  
  6. target_dir = 'F:\\back up\\' # Remember to change this to what 
    you will be using  
  7. target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.zip'  
  8. zip_command = "zip -qr \"%s\" \"%s\"" % (target, ' '.join(source))  
  9. # Run the backup  
  10. if os.system(zip_command) == 0:  
  11. print 'Successful backup to', target  
  12. else:  
  13. print 'Backup FAILED' 

以上就是我们对Python调用zip命令的相关介绍。

责任编辑:曹凯 来源: 博客园
相关推荐

2010-03-04 14:32:24

Python自动下载文

2010-02-23 17:59:52

WSIT连接WCF

2010-01-28 14:01:32

Android监听通话

2010-03-03 17:10:57

Python操作Sql

2010-01-27 14:08:56

Android查询联系

2010-02-01 09:40:08

Python操作

2009-08-18 15:49:19

C# 操作Excel

2010-03-04 09:58:32

安装Python

2010-03-05 13:48:24

Python for

2010-02-03 10:23:47

C++操作符重载

2010-02-04 15:05:00

C++ cpuid指令

2010-03-15 15:18:23

Python运行

2009-12-15 13:59:42

Ruby对象操作

2010-01-28 16:14:33

Android安装卸载

2010-02-02 13:57:31

C++解析#pragm

2009-12-30 14:28:06

Silverlight

2009-12-31 11:35:20

Silverlight

2009-09-18 10:58:31

C#数组操作

2010-03-11 09:56:57

Python字符串操作

2010-09-08 15:47:08

JavsScriptJavaScript
点赞
收藏

51CTO技术栈公众号