技术开发 频道

Python中的文件和目录操作

  三、文件和目录的删除

  若要删除单个文件的话,可以使用os.remove函数,例如:os.remove(’mydata.dat’)。Os.remove的别名是os.unlink,不过后者跟传统的UNIX操作系统以及Perl中清除文件的函数重名。我们可以使用下列方式来删除一组文件,如所有以.jpg以及*.gif为扩展名的文件:

  for file in glob.glob(’*.jpg’) + glob.glob(’*.gif’):

  os.remove(file)

  大家知道,只有当目录中内容已经被清空的时候,我们才可以使用rmdir命令来删除该目录。不过,我们经常想要删除一个含有许多文件的目录树,这时我们可以使用shutil模块提供的rmtree函数,如下所示:

shutil.rmtree(’mydir’)

  它相当于UNIX操作系统中的命令rm -rf mydir。

  我们可以建立一个自定义函数,使其在进行删除操作的时候将文件和目录做同等对待,其典型用法如下所示:

  remove(’my.dat’) #删除当个文件my.dat

  remove(’mytree’)
#删除单个目录树 mytree

  
# 通过字符串列表中的名称来删除多个文件/目录树:

  remove(glob.glob(’
*.tmp’) + glob.glob(’*.temp’))

  remove([’my.dat’,’mydir’,’yourdir’]
+ glob.glob(’*.data’))

  下面是remove函数的实现:

  def remove(files):

  
"""删除一个或多个文件和/或目录。"""

  
if isinstance(files, str): # files是个字符串吗?

  files
= [files] # 把files从字符串转为列表

  
if not isinstance(files, list): # files不是列表吗?

  
<report error>

  
for file in files:

  
if os.path.isdir(file):

  shutil.rmtree(file)

  
elif os.path.isfile(file):

  os.remove(file)

  下面测试一下remove函数的灵活性:

  # 建立10个目录tmp_* ,以及10各文件tmp__*:

  
for i in range(10):

  os.mkdir(’tmp_’
+str(i))

  f
= open(’tmp__’+str(i), ’w’); f.close()

  remove(’tmp_1’)
# tmp_1为目录

  remove(glob.glob(’tmp_[0
-9]’) + glob.glob(’tmp__[0-9]’))

  作为上述remove函数实现的一个注记,我们进行了下列测试:

  
if not isinstance(files, list):

  它实际上是过于严厉。我们需要的只是一个被遍历的一个文件/目录名序列。实际上,我们并不关心名称是否存储在一个列表、元组或者数值数组中,所以更好的测试应该像下面这样:

  if not operator.isSequenceType(files):

  
<report error>
0
相关文章