linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux基础建设 >

如何在Python中删除文件和目录

时间:2020-02-09  来源:未知  作者:admin666

Python有一些内置模块,可让您删除文件和目录。本教程说明了如何使用os,pathlib和shutil模块中的函数删除文件和目录。

如何在Python中删除文件和目录

删除文件

在Python中,您可以使用os.remove(),os.unlink(),(),pathlib.Path.unlink()删除单个文件。

os模块提供了一种与操作系统交互的便携式方法。 该模块可用于Python 2和3。

要使用os.remove()删除单个文件,请将路径作为参数传递给文件:

import os

file_path = '/tmp/linuxmi.txt'
os.remove(file_path)

os.remove() 和 os.unlink()函数在语义上是相同的:

import os

file_path = '/tmp/_cafenv-appconfig_'
os.unlink(file_path)

如何在Python中删除文件和目录

删除文件需要在包含文件的目录上具有写和执行权限。 否则,您将得到PermissionError错误。

为了避免在删除文件时出错,可以使用异常处理来捕获异常并发送适当的错误消息:

import os

file_path = '/tmp/_cafenv-appconfig_'

try:
    os.remove(file_path)
except OSError as e:
    print("Error: %s : %s" % (file_path, e.strerror))

如下图:

如何在Python中删除文件和目录

Error: /tmp/_cafenv-appconfig_ : Operation not permitted

pathlib模块在Python 3.4及更高版本中可用。 如果要在Python 2中使用此模块,可以使用pip进行安装。 pathlib提供了一个面向对象的界面,用于处理不同操作系统的文件系统路径。

要使用pathlib模块删除文件,请创建一个指向该文件的Path对象,然后对该对象调用unlink()方法:

from pathlib import Path

file_path = Path('/tmp/linuxmi.txt')

try:
    file_path.unlink()
except OSError as e:
    print("Error: %s : %s" % (file_path, e.strerror))

pathlib.Path.unlink(),os.remove() 和 os.unlink()也可用于删除符号链接。

模式匹配

您可以使用glob模块根据模式匹配多个文件。 例如,要删除/tmp目录中的所有.txt文件,您将使用以下内容:

import os
import glob

files = glob.glob('/tmp/*.txt')

for f in files:
    try:
        f.unlink()
    except OSError as e:
        print("Error: %s : %s" % (f, e.strerror))

要递归删除/tmp目录中所有.txt及其下所有子目录的文件,请将recursive=True参数传递给 glob()函数,并使用``**`模式:

import os
import glob

files = glob.glob('/tmp/**/*.txt', recursive=True)

for f in files:
    try:
        os.remove(f)
    except OSError as e:
        print("Error: %s : %s" % (f, e.strerror))

pathlib模块包含两个glob函数glob() 和 rglob(),用于匹配给定目录中的文件。 glob() 仅与顶级目录中的文件匹配。 rglob() 递归地匹配目录和所有子目录中的所有文件。 下面的示例代码删除/tmp目录中的所有.txt文件:

from pathlib import Path

for f in Path('/tmp').glob('*.txt'):
    try:
        f.unlink()
    except OSError as e:
        print("Error: %s : %s" % (f, e.strerror))

删除目录(文件夹)

在Python中,您可以使用os.rmdir() 和 pathlib.Path.rmdir()删除一个空目录,而shutil.rmtree()删除一个非空目录。

以下示例显示如何删除空目录:

import os

dir_path = '/tmp/linuxmi'

try:
    os.rmdir(dir_path)
except OSError as e:
    print("Error: %s : %s" % (dir_path, e.strerror))

另外,您可以使用pathlib模块删除目录:

from pathlib import Path

dir_path = Path('/tmp/linuxmi')

try:
    dir_path.rmdir()
except OSError as e:
    print("Error: %s : %s" % (dir_path, e.strerror))

shutil模块允许您对文件和目录执行许多高级操作。

使用shutil.rmtree()函数,您可以删除给定目录,包括其内容:

import shutil

dir_path = '/tmp/linuxmi'

try:
    shutil.rmtree(dir_path)
except OSError as e:
    print("Error: %s : %s" % (dir_path, e.strerror))


传递给shutil.rmtree()的参数不能是指向目录的符号链接。

总结

Python提供了几个用于处理文件的模块。

我们已向您展示了如何使用os.remove(),os.unlink() 和 pathlib.Path.unlink()删除单个文件, os.rmdir() 和pathlib.Path.rmdir()删除空白文件,以及shutil.rmtree()来递归地删除目录及其所有内容。

删除文件或目录时要格外小心,因为一旦删除文件,就无法轻松恢复它。

如果您有任何疑问或反馈,请随时发表评论。

更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

友情链接
  • Mozilla发布Firefox 67.0.4,修复沙箱逃逸漏洞
  • 蚂蚁金服正式成为CNCF云原生计算基金会黄金会员
  • Firefox 68将采用Microsoft BITS安装更新
  • OpenSSH增加对存储在RAM中的私钥的保护
  • 谷歌想实现自己的curl,为什么?
  • Raspberry Pi 4发布:更快的CPU、更大的内存
  • Firefox的UA将移除CPU架构信息
  • Ubuntu放弃支持32位应用程序实属乌龙,Steam会否重回Ubuntu怀抱
  • Qt 5.13稳定版发布:引入glTF 2.0、改进Wayland以及支持Lottie动
  • 红帽企业Linux 7现已内置Redis 5最新版
  • Slack进入微软内部禁用服务清单,GitHub也在其列?
  • 安全的全新编程语言V发布首个可用版本
  • Windows Terminal已上架,快尝鲜
  • 阿里巴巴微服务开源生态报告No.1
  • 面世两年,Google地球将支持所有基于Chromium的浏览器
  • 推进企业容器化持续创新,Rancher ECIC千人盛典完美收官
  • CentOS 8.0最新构建状态公布,或于数周后发布
  • Debian移植RISC
  • 微软拆分操作系统的计划初现雏形
  • Oracle发布基于VS Code的开发者工具,轻松使用Oracle数据库
  • Ubuntu 19.10停止支持32位的x86架构
  • 微软为Windows Terminal推出全新logo
  • 联想ThinkPad P系列笔记本预装Ubuntu系统
  • 微软发布适用于Win7/8的Microsoft Edge预览版
  • 启智平台发布联邦学习开源数据协作项目OpenI纵横
  • 经过六个多月的延迟,微软终于推出Hyper
  • ZFS On Linux 0.8.1 发布,Python可移植性工作
  • DragonFly BSD 5.6.0 发布,HAMMER2状态良好
  • Linux Kernel 5.2
  • CentOS 8.0 看起来还需要几周的时间
  • 百度网盘Linux版正式发布
  • PCIe 6.0宣布:带宽翻倍 狂飙至256GB/s
  • PHP 7.4 Alpha 发布,FFI扩展,预加载Opcache以获得更好的性能
  • Canonical将在未来的Ubuntu版本中放弃对32位架构的支持
  • Scala 2.13 发布,改进的编译器性能
  • 微软的GitHub收购了Pull Panda,并且使所有订阅完全免费
  • Windows Subsystem for Linux 2 (WSL 2)现在适用于Windows 10用
  • Debian 10 “Buster”的RISC
  • MariaDB宣布发布MariaDB Enterprise Server 10.4
  • DXVK 1.2.2 发布,带来微小的CPU开销优化
  • DragonFlyBSD 5.6 RC1 发布,VM优化,默认为HAMMER2
  • PrimeNG 8.0.0 发布,支持Angular 8,FocusTrap等
  • GIMP 2.10.12 发布,一些有用的改进
  • 清华大学Anaconda 镜像服务即将恢复
  • Debian GNU/Linux 10 “Buster” 操作系统将于2019年7月6日发布
  • 时时彩论坛
  • 五星体育斯诺克
  • 北单比分直播
  • 河北11选5走势图
  • 福建体彩36选7开奖结果
  • 九龙图库下载