删除文件夹(包括子文件夹)

注意,os.walk等函数可以处理的是unicode类型的中文路径,即处理中文路径时必须转换成unicode类型供函数使用。代码中直接指定中文路径时,使用s.decode("utf-8")。处理输入中文路径时,用s.decode("gbk").还有就是打印时,要将unicode类型字符串转换成gb2312或gbk编码方式。解码,使用decode和unicode函数都可以。

一、使用os.walk

#! /usr/bin/env python
#coding=utf-8
import os
def Remove_dir(top_dir):
    if os.path.exists(top_dir)==False:
        print "not exists"
        return
    if os.path.isdir(top_dir)==False:
        print "not a dir"
        return
    for dir_path,subpaths,files in os.walk(top_dir,False):
        for file in files:
            file_path=os.path.join(dir_path,file)
            print "delete file:"+file_path.encode("gbk")
            os.remove(file_path)
        print "delete dir:"+dir_path.encode("gbk")
        os.rmdir(dir_path)

#调用(用户输入:支持中文路径)
input_path=raw_input("dir:")
top_dir=input_path.decode("gbk")
Remove_dir(top_dir)

#调用(代码中指定中文路径)
path=r"C:\Users\Administrator\Desktop\4 - 副本"
unicode_path=path.decode("utf-8")
Remove_dir(unicode_path)

二、使用os.listdir()的循环调用

#! /usr/bin/env python
#coding=utf-8
import os
import sys
def Remove_dir(top_dir):
    if os.path.exists(top_dir)==False:
        print "not exist"
        return
    if os.path.isdir(top_dir)==False:
        print "This is not a dir"
        print top_dir
        return
    for item in os.listdir(top_dir):
        base_path=os.path.join(top_dir,item)
        if os.path.isfile(base_path):
            try:
                os.remove(base_path)
            except:
                pass
        elif os.path.isdir(top_dir):
            Remove_dir(base_path)   #递归调用
    #最后删除顶级目录
    try:
        os.rmdir(top_dir)
    except:
        pass

#函数调用
dir="C:\\Users\\Administrator\\Desktop\\新建文件夹 (2)"
unicode_dir=unicode(dir,'utf8')
Remove_dir(unicode_dir)

你可能感兴趣的:(删除文件夹(包括子文件夹))