2019python面试题-用python删除一个文件,删除一个非空目录
删除一个文件
os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。
import os # 删除一个文件 my_file = 'D:/MyDocument/sc/ee.txt' if os.path.exists(my_file): # 若存在,则删除 os.remove(my_file) print('删除%s成功' %my_file) else: print('no such file:%s' % my_file)
os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误。
import os # 删除一个文件 my_file = 'D:/MyDocument/sc/ee.txt' if os.path.exists(my_file): # 若存在,则删除 os.unlink(my_file) print('删除%s成功' %my_file) else: print('no such file:%s' % my_file)
删除目录
os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
import os # 列出目录 print ("目录为: %s" %os.listdir(os.getcwd())) # 删除目录 os.rmdir('ee') # 列出删除后的目录 print ("移除后目录为 %s :" %os.listdir(os.getcwd())) 运行结果: 目录为: ['ee', 'fun.py'] 移除后目录为 ['fun.py'] >>>
os.removedirs() 方法用于递归删除目录。
像rmdir(), 如果子文件夹成功删除, removedirs()才尝试它们的父文件夹,直到抛出一个error(它基本上被忽略,因为它一般意味着你文件夹不为空)。
import os # 列出目录 print ("目录为: %s" %os.listdir(os.getcwd())) # 删除目录 os.removedirs('ee/ff/') # 列出删除后的目录 print ("移除后目录为 %s :" %os.listdir(os.getcwd())) 运行结果: 目录为: ['ee', 'fun.py'] 移除后目录为 ['fun.py']
os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。
os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
语法 walk()方法语法格式如下: os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) 参数: top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。 1、root 所指的是当前正在遍历的这个文件夹的本身的地址 2、dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录) 3、files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录) topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。
如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),
如果为 False,则优先遍历 top 的子目录。
import os for root, dirs, files in os.walk('D:\MyDocument\sc\ee', topdown=False): for name in files: print(os.path.join(root, name)) os.remove(os.path.join(root, name)) for name in dirs: print(os.path.join(root, name)) os.rmdir(os.path.join(root, name)) 运行结果: D:\MyDocument\sc\ee\ff.txt D:\MyDocument\sc\ee\ff >>>
import shutil
shutil通常是最后一个目录不为空,或者是权限不对,或者是你当前运行的目录就在那个目录,总之被占用,被锁,没有权限,不为空都删除不了。
rmtree(path, ignore_errors=False, onerror=None): 移除文档树,将文件夹目录删除
ignore_errors:是否忽略错误,默认False
onerror:定义错误处理函数,需传递一个可执行的处理函数,该处理函数接收三个参数:函数、路径和excinfo
>>> import shutil >>> shutil.rmtree('D:\MyDocument\sc\ee')