注意,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)