如何删除文件或文件夹?
当前回答
为了避免Éric Araujo评论中强调的TOCTOU问题,您可以捕捉一个异常来调用正确的方法:
def remove_file_or_dir(path: str) -> None:
""" Remove a file or directory """
try:
shutil.rmtree(path)
except NotADirectoryError:
os.remove(path)
因为shutil.rmtree()将只删除目录,os.remove()或os.unlink()将仅删除文件。
其他回答
对于删除文件:
os.unlink(path, *, dir_fd=None)
or
os.remove(path, *, dir_fd=None)
这两个函数在语义上是相同的。此函数用于删除文件路径。若路径不是文件,而是目录,则引发异常。
删除文件夹:
shutil.rmtree(path, ignore_errors=False, onerror=None)
or
os.rmdir(path, *, dir_fd=None)
为了删除整个目录树,可以使用shutil.rmtree()。os.rmdir仅在目录为空且存在时有效。
对于向父级递归删除文件夹:
os.removedirs(name)
它使用self删除每个空的父目录,直到父目录包含一些内容
例如,如果目录为空,os.removedirs('abc/xyz/pqr')将按“abc/xyz/pqr”、“abc/xy z”和“abc”的顺序删除目录。
有关更多信息,请查看官方文档:os.unlink、os.remove、os.rmdir、shutil.rmtree、os.removedirs
删除文件夹中的所有文件
import os
import glob
files = glob.glob(os.path.join('path/to/folder/*'))
files = glob.glob(os.path.join('path/to/folder/*.csv')) // It will give all csv files in folder
for file in files:
os.remove(file)
删除目录中的所有文件夹
from shutil import rmtree
import os
// os.path.join() # current working directory.
for dirct in os.listdir(os.path.join('path/to/folder')):
rmtree(os.path.join('path/to/folder',dirct))
我个人的偏好是使用pathlib对象——它提供了一种与文件系统交互的更具Python性和更少出错的方式,尤其是在您开发跨平台代码时。
在这种情况下,您可以使用pathlib3x-它提供了最新的(在编写此答案时为Python 3.10.a0)Python路径库,用于Python 3.6或更高版本,以及一些附加功能,如“copy”、“copy2”、“copy tree”和“rmtree”等。。。
它还包装shutil.rmtree:
$> python -m pip install pathlib3x
$> python
>>> import pathlib3x as pathlib
# delete a directory tree
>>> my_dir_to_delete=pathlib.Path('c:/temp/some_dir')
>>> my_dir_to_delete.rmtree(ignore_errors=True)
# delete a file
>>> my_file_to_delete=pathlib.Path('c:/temp/some_file.txt')
>>> my_file_to_delete.unlink(missing_ok=True)
你可以在github或PyPi上找到它
免责声明:我是pathlib3x库的作者。
为了避免Éric Araujo评论中强调的TOCTOU问题,您可以捕捉一个异常来调用正确的方法:
def remove_file_or_dir(path: str) -> None:
""" Remove a file or directory """
try:
shutil.rmtree(path)
except NotADirectoryError:
os.remove(path)
因为shutil.rmtree()将只删除目录,os.remove()或os.unlink()将仅删除文件。
如果您喜欢编写一段漂亮且可读的代码,我建议使用子流程:
import subprocess
subprocess.Popen("rm -r my_dir", shell=True)
如果你不是软件工程师,那么可以考虑使用Jupyter;您可以简单地键入bash命令:
!rm -r my_dir
传统上,您使用shutil:
import shutil
shutil.rmtree(my_dir)
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录