注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

python 执行命令(从压缩文件说起)  

2011-02-22 14:14:00|  分类: Web技术-Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

python 执行命令(从压缩文件说起)

我们在本文中通过压缩文件来简单谈谈python中如何运行命令。在开始之前,有几点要说是一下:

1 python版本:以下所有程序均运行在3.1版本上。

2 系统平台为window Xp

3 程序中所使用的“WinRAR” (即:WinRAR.exe)是Xp自带的,你可以在“C:\Program Files\WinRAR”中找到,当然如果你要直接使用命令得将“WinRAR”设置到系统环境变量中,如何设置你可以在http://hi.baidu.com/fc_lamp/blog/item/6d63b6581e7844272834f0ca.html?timeStamp=1293437957496中寻找到答案。

代码如下(版本一):

1 #!/user/bin/python

2 #filename:dom.py

3 print('=============python案例一======================')

4 import os,time  #导入模块

5 s = time.time()

6 source = ['D:/Project/Newsletter/'] #源地址

7 dest = 'D:/Project'  #目标地址

8 dest = dest +'/'+time.strftime('%Y%m%d%H%M%S')+'.zip' #使用“+”来连接字符串,strftime()格式化一个时间,这类似于PHP中的date()函数

9  zip_command = "WinRAR.exe a -r %s %s"%(dest,source[0]) #使用元组

10 r = os.system(zip_command)  

# ################################

#使用os的system函数运行命令,这与PHP中的system函数类似

#在PHP中我们可以这样简单执行:

# $source = 'D:/Project/Newsletter/'; #源地址

# $dest = 'D:/Project/zz.zip'; #目标地址

# system("WinRAR a -r $dest $source");

###############################

11 if  r == 0 :  #如果命令成功运行,它返回0,否则它返回错误号

12     print('Successful backup to ',dest)

13 else:

14     print('Backup FAILED,Erro:',r,'\n comand:',zip_command)

15  print('=========:',time.time() - s)  #时间

以上代码说明:

              1  在第4行中:我们同时导入了os和time模块

              2  第6,7行中我们指明路径,第6行中我使用列表的原因是:源地址可以为多个 使用列表存放。另外:路径中我为何使正斜杠,而不是win默认的路径格式,原因在于:在Python的反斜杠表示转义符,所以如果你要使用win的默认路径格式,可以采用以下方案解决:

                   (1) 使用'C:\\Documents'或r'C:\Documents':符号"r' 我们在以前的文章里说过,它表示它后面跟的是自然字符串

                           (即看到什么 就是什么)如语句: print(r'\nsdfsdf'):会原样输出:“\nsdfsdf ”而没有对\n进行转义

            3  第8,9行中是关于字符串的操作问题,对于time详细信息你可以查阅相关资料。代码中我们使用了“+”,以及元组来操作了字符串。实上从中我们可以得到python中字符串与字符串的连接,字符串与变量的连接,字符串与数字类型的连接等等的方式有:

                    (1)使用“+”,实上我在http://hi.baidu.com/fc_lamp/blog/item/b032d409d4b1e4c262d986c1.html 文章里就提到过了,你可                               去看看,因此第9行代码还可以写为:zip_command = 'WinRAR.exe a -r '+dest+' '+ source[0]

                    (2)使用元组:恩,是的我们也可以使用元组来“连接”两字符串的,当然你得知道当中的格式化一些操作符,如:”%s,%d“等

                             因此第 8行代码还以写为:dest = "%s/%s.zip"%(dest,time.strftime('%Y%m%d%H%M%S'))

                      对于使用哪一种方式,以实际情况而定!

                另外:第9行中,创建压缩包的命令有很多,像linux中的tar命令等,当然平台不一样命令参数也不一样。这里有一个命令详      

                         解:http://wenku.baidu.com/view/0d1812d380eb6294dd886c0f.html

 

代码如下(版本二):

############################

#在开始之前有一点需要说明的是:

#python对文件的操作被包含在了os模块中

#############################

 

print('按日期进行归档分类')

1 import os,time  

2 source = ['D:/Project/Newsletter/'] #源地址

3 dest = 'D:/Project/' #目标地址

4 day = dest + time.strftime('%Y%m%d') #返回日期

5 time = time.strftime('%H%M%S') #返回时间

6 if not os.path.exists(day): #检测目录是否存在

7    os.mkdir(day) #创建目录

8    print('Create Dir:',os.path.exists(day))

9 #comment

10 comm = input('Enter a comment:') #注意input函数版本的差异

11 if len(comm) == 0:  #用户有没有输入相应内容

12    dest = day + '/'+time+'.zip' #os.sep

13 else:

14    dest = day + '/'+time+'_'+\  #使用换行”\“来实现一条语言多行写的格式

15    comm.replace(' ','_')+'.zip'

16 zip_command = "WinRAR a -r %s %s"%(dest,source[0])

17 r = os.system(zip_command)

18 if r == 0:

19    print('Successful backup to ',dest)

20 else:

21    print('Backup FAILED,Erro:',r,'\n comand:',zip_command)

以上代码说明:

                 1 第6,7行代码中:展示了python中对文件的操作方式,文件操作被包含在os模块中,如打一个文件:os.fdopen()(PHP中使用fopen函数),注意创建目录函数mkdir是不能创建同级目录的这一点与PHP的一致,详见:http://hi.baidu.com/fc_lamp/blog/item/c378dc54244335cdb745aed4.html 另外需要注意的Python中检测性运算的写法,类似的还有”in,not in,is,not is“。参见:http://hi.baidu.com/fc_lamp/blog/item/b032d409d4b1e4c262d986c1.html

                2 第12行代码中:dest = day + '/'+time+'.zip'  ‘/’路径分隔符可用os.sep来代替:os.sep变量会根据你的操作系统给出目录分隔符,即在Linux、Unix下它是'/',在Windows下它是'\\',而在Mac OS下它是':',这样增强代码的可移植性。

                3 注意第14,15行代码,实际上它们是在同一逻辑行中(注意看代码的缩进:我们已多次提到代码的缩进问题),我们使用了换行符”\“来实现一条语句的多物理行的写法,如写长SQL。

                   另外代码中使用了replace函数实现字符间的替换,使用方法为(手册说明):

                       str.replace(old, new[, count])

                           (提示:old指要被替换的值,new是被替换成的值,可选 参数count指字符串中old有几个需要被替换)

                             Return a copy of the string with all occurrences of substring old replaced by new. 

                            If the optional argument count is given, only the first count occurrences are replaced.


最后的说明:在python中有专门的归档类库zipfile和tarfile。它们是Python标准库的一部分,可以供你使用。应避免使用os.system这个不推荐使用的函数。

  评论这张
 
阅读(466)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017