Python中删除文件或文件夹的方法

Python中删除文件或文件夹的方法

技术背景

在Python编程中,经常会遇到需要删除文件或文件夹的场景,例如清理临时文件、管理数据目录等。Python提供了多种方法来实现这一功能,不同的方法适用于不同的情况。

实现步骤

不同版本Python删除文件或文件夹的方法

  • Python 3.4及以上版本:可以使用pathlib模块。
    • pathlib.Path.unlink():用于删除文件或符号链接。
    • pathlib.Path.rmdir():用于删除空目录。
  • Python 3.3及以下版本:使用osshutil模块。
    • os.remove():删除文件。
    • os.unlink():删除符号链接。
    • os.rmdir():删除空目录。
    • shutil.rmtree():删除目录及其所有内容。

删除文件的示例

  • 使用os.remove()
1
2
import os
os.remove("test_file.txt")
  • 先检查文件是否存在再使用os.remove()删除
1
2
3
4
5
import os
if os.path.isfile("test.txt"):
os.remove("test.txt")
else:
print("File does not exist")
  • 删除特定扩展名的所有文件
1
2
3
4
5
6
import os 
from os import listdir
my_path = 'C:\\Python Pool\\Test'
for file_name in listdir(my_path):
if file_name.endswith('.txt'):
os.remove(my_path + file_name)
  • 删除文件夹内的所有文件
1
2
3
4
import os, glob
for file in glob.glob("pythonpool/*"):
os.remove(file)
print("Deleted " + str(file))

删除文件夹的示例

  • 使用shutil.rmtree()删除非空文件夹
1
2
3
4
5
6
import shutil 
import os
location = "E:/Projects/PythonPool/"
dir = "Test"
path = os.path.join(location, dir)
shutil.rmtree(path)
  • 使用pathlib.Path.rmdir()删除空文件夹
1
2
3
from pathlib import Path
q = Path('foldername')
q.rmdir()

核心代码

通用的删除函数

1
2
3
4
5
6
7
8
9
10
11
import os
import shutil

def remove(path):
""" param <path> could either be relative or absolute. """
if os.path.isfile(path) or os.path.islink(path):
os.remove(path) # remove the file
elif os.path.isdir(path):
shutil.rmtree(path) # remove dir and all contains
else:
raise ValueError("file {} is not a file or dir.".format(path))

处理删除文件或文件夹时避免TOCTOU问题的函数

1
2
3
4
5
6
7
8
9
import os
import shutil

def remove_file_or_dir(path: str) -> None:
""" Remove a file or directory """
try:
shutil.rmtree(path)
except NotADirectoryError:
os.remove(path)

最佳实践

在删除文件或文件夹之前,最好先检查其是否存在,避免因文件或文件夹不存在而引发错误。可以使用以下两种方法:

  • 使用os.path.isfile()检查文件是否存在
1
2
3
4
5
6
7
#!/usr/bin/python
import os
myfile = "/tmp/foo.txt"
if os.path.isfile(myfile):
os.remove(myfile)
else:
print("Error: %s file not found" % myfile)
  • 使用异常处理
1
2
3
4
5
6
7
#!/usr/bin/python
import os
myfile = input("Enter file name to delete: ")
try:
os.remove(myfile)
except OSError as e:
print("Error: %s - %s." % (e.filename, e.strerror))

常见问题

  • 删除非空文件夹时使用os.rmdir()报错os.rmdir()只能删除空文件夹,如果要删除非空文件夹,应使用shutil.rmtree()
  • 文件或文件夹不存在时删除报错:可以使用上述的最佳实践方法,先检查文件或文件夹是否存在,或者使用异常处理来捕获并处理FileNotFoundError异常。

Python中删除文件或文件夹的方法
https://119291.xyz/posts/2025-05-09.python-file-and-folder-deletion/
作者
ww
发布于
2025年5月9日
许可协议