第三十五节 文件删除Delete a File

  • 前言
  • 实践


前言

我们这一节来介绍如何删除一个文件,这里需要用到函数os.remove(path)用于删除指定路径下的文件,os.rmdir(path)用于删除指定路径下的空文件夹,shutil.rmtree(path)用于删除指定路径下的文件夹及其子文件夹。

实践

我们先来学习删除一个文件,这里同样以之前用到的lyric.txt为例进行展示:

import os
path = r"C:\Users\shen_student\Desktop\lyric.txt"
os.remove(path)

可见该文件被删除了,那么如果我们删除一个不存在的文件会发生什么呢?我们将上述代码再运行一次,会发现程序报错了:

>>> FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'C:\\Users\\shen_student\\Desktop\\lyric.txt'

他告诉你找不到指定的文件,这里我们可以用Python的异常相关知识避免程序遇到异常时中断执行:

import os
path = r"C:\Users\shen_student\Desktop\lyric.txt"
try:
    os.remove(path)
except FileNotFoundError:
    print("That file was not found")
else:
    print(path + " was deleted")

我们运行上述代码,发现当指定文件不存在时会打印That file was not found,当文件存在时会打印C:\Users\shen_student\Desktop\temp.txt was deleted。
那么我们是否可以用os.remove(path)这个函数删掉一个空文件夹呢?我们新建一个空文件夹命名为temp,然后执行代码:

import os
path = r"C:\Users\shen_student\Desktop\temp"
try:
    os.remove(path)
except FileNotFoundError:
    print("That file was not found")
else:
    print(path + " was deleted")

会发现程序报错了,错误信息为:

>>> PermissionError: [WinError 5] 拒绝访问。: 'C:\\Users\\shen_student\\Desktop\\temp'

也即无法访问这个路径,这是因为os.remove(path)只能删除文件,不能删除文件夹,如果我们想删除文件夹,需要用到os.rmdir(path)这个函数:

import os
path = r"C:\Users\shen_student\Desktop\temp"
try:
    os.rmdir(path)
except FileNotFoundError:
    print("That file was not found")
else:
    print(path + " was deleted")

我们执行上述代码会发现空文件夹已经被成功删除并打印C:\Users\shen_student\Desktop\temp was deleted。如果再执行一次便会打印That file was not found,因为此时文件夹已经不存在了,所以他会抛出异常信息,也即文件不存在。如果我们文件夹还包含子文件时,用上述代码删除文件夹会发生什么呢?
我们在temp文件夹下新建temp文件夹,然后执行上述代码:

>>> OSError: [WinError 145] 目录不是空的。: 'C:\\Users\\shen_student\\Desktop\\temp'

发现程序报错了,告诉你文件夹不是空的,这是因为os.rmdir(path)只能删除空文件夹,如果要删除包含子文件的文件夹,我们需要用到函数shutil.rmtree(path)。并且,我们也可以用异常处理机制避免上述异常中断:

import os
import shutil
path = r"C:\Users\shen_student\Desktop\temp"
try:
    shutil.rmtree(path)
except FileNotFoundError:
    print("That file was not found")
except PermissionError:
    print("You do not have permission to delete that")
except OSError:
    print("You cannot delete that using that fuction")
else:
    print(path + " was deleted")
>>> C:\Users\shen_student\Desktop\temp was deleted

可以发现文件夹已经被成功删除了。

以上便是文件删除的全部内容,感谢大家的收藏、点赞、评论。我们下一节将介绍模块(Modules),敬请期待~