我使用Python,很多时候是用Python写一些文件或者目录的处理脚本。正是出于这个原因,很多时候我会用到os模块。我使用os模块,有时候还会出于另外一个原因,那就是直接使用system方法去调用现在系统中已经存在的命令或者功能。

       最近写一个小脚本的时候一个抛出的异常突然间给了我一点提醒,或许有些方法还是值得改进的。我在写一个目录归档备份的小脚本,在初期的测试过程中,遇到了拷贝失败的情况。因为我对脚本进行反复运行测试的时候,出现了待备份文件已经在目标位置存在的情况。有意思的是抛出的异常中有一个提示是说不能够mkdir目录,一看这个mkdir词眼儿我熟悉,但是一回神儿觉得不对劲儿,因为此时我压根儿没有调用系统中的任何功能。一瞬间觉得,似乎这个方法在Python中是存在的。搜了一下帮助手册,果真如此,我还傻乎乎使用system调用系统功能这么久。好的是mkdir在各个操作系统上还都是存在的。

       说到这里,其实有一个有意思的小问题已经出现了:其实,在Python编程实现某个功能的时候其实我们有很多选择,脚本语言本来就擅长吸收中价值所长嘛!如此,如果创建一个目录我现在会用的已经有两种方法了。

       方法1:

import os


dir_name = 'test'


os.system('mkdir%s' % dir_name)

       运行结果:

In [1]: ls

 驱动器 E 中的卷没有标签。

 卷的序列号是 2013-5089


 E:\WorkSpace\01_编程语言\03_Python\python_exp01的目录


2017/03/29  20:58   <DIR>          .

2017/03/29  20:58   <DIR>          ..

2017/03/29  20:59                70 python_exp01.py

               1 个文件             70 字节

               2 个目录77,685,592,064 可用字节


In [2]: %runpython_exp01.py


In [3]: ls

 驱动器 E 中的卷没有标签。

 卷的序列号是 2013-5089


 E:\WorkSpace\01_编程语言\03_Python\python_exp01的目录


2017/03/29  21:00   <DIR>          .

2017/03/29  21:00   <DIR>          ..

2017/03/29  20:59                70 python_exp01.py

2017/03/29  21:00   <DIR>          test

               1 个文件             70 字节

               3 个目录77,685,592,064 可用字节

       由以上结果可以看出,脚本成功调用了系统的mkdir命令实现了目录的创建。

       方法2:

import os


dir_name = 'test'

os.mkdir(dir_name)

       运行结果:

In [8]: ls

 驱动器 E 中的卷没有标签。

 卷的序列号是 2013-5089


 E:\WorkSpace\01_编程语言\03_Python\python_exp02的目录


2017/03/29  21:01   <DIR>          .

2017/03/29  21:01   <DIR>          ..

2017/03/29  21:02                54 python_exp02.py

               1 个文件             54 字节

               2 个目录77,685,592,064 可用字节


In [9]: %runpython_exp02.py


In [10]: ls

 驱动器 E 中的卷没有标签。

 卷的序列号是 2013-5089


 E:\WorkSpace\01_编程语言\03_Python\python_exp02的目录


2017/03/29  21:02   <DIR>          .

2017/03/29  21:02   <DIR>          ..

2017/03/29  21:02                54 python_exp02.py

2017/03/29  21:02   <DIR>          test

               1 个文件             54 字节

               3 个目录77,685,592,064 可用字节

       从结果看,这种方法与第一种方法取得了同样的效果。但是,总体上说来这种方法还是有优势的。首先,代码简洁了许多;其次,你不需要去了解操作系统环境中本身存在的命令或者功能,因为Python中已经提供了一个通用的接口。总体说来,这种方法不仅仅是提升了代码的可读性,同时也提高了代码的可移植性。