python的文件操作模块shutil和pathlib总结

news2025/2/27 23:20:50

一:shutil模块

1,shutil模块安装

pip insatll shutilwhich

2,shutil支持的方法

可以通过dir(shutil)查看shutil支持的方法和属性

['Error', 'ExecError', 'ReadError', 'RegistryError', 'SameFileError', 'SpecialFileError', '_ARCHIVE_FORMATS', '_BZ2_SUPPORTED', 
'_LZMA_SUPPORTED', '_UNPACK_FORMATS', '_ZLIB_SUPPORTED', '__all__', '__builtins__', '__cached__', '__doc__', '__file__',
 '__loader__', '__name__', '__package__', '__spec__', '_basename', '_check_unpack_options', '_copyxattr', '_destinsrc', '_ensure_directory', 
 '_find_unpack_format', '_get_gid', '_get_uid', '_make_tarball', '_make_zipfile', '_ntuple_diskusage', '_rmtree_safe_fd',
 '_rmtree_unsafe', '_samefile', '_unpack_tarfile', '_unpack_zipfile', '_use_fd_functions', 'chown', 'collections', 'copy', 
 'copy2', 'copyfile', 'copyfileobj', 'copymode', 'copystat', 'copytree', 'disk_usage', 'errno', 'fnmatch', 'get_archive_formats', 'get_terminal_size', 
 'get_unpack_formats', 'getgrnam', 'getpwnam', 'ignore_patterns', 'make_archive', 'move', 'nt', 'os', 
 'register_archive_format', 'register_unpack_format', 'rmtree', 'stat', 'sys', 'unpack_archive', 'unregister_archive_format', 'unregister_unpack_format', 'which']

3,shutil方法举例

1>文件拷贝copy,copy2

这两个方法都可以拷贝文件,但是有什么不同?

 你可以理解为copy2拷贝的更彻底

shutil.copy('http.pcap','test/')
shutil.copy2('http.pcap','test/')

将http.pcap文件拷贝到test的文件夹下

 

 上边是copy的结果,下边是copy2的结果,可以看到下边的文件时间信息都拷贝过来了

2>文件删除rmtree

 递归删除一个文件夹,连同文件夹本身会删除

shutil.rmtree('test')

 需要注意的是传入的path参数必须是一个文件夹,如果是文件的话就会报错

>>> shutil.rmtree('1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/shutil.py", line 239, in rmtree
    onerror(os.listdir, path, sys.exc_info())
  File "/usr/lib64/python2.7/shutil.py", line 237, in rmtree
    names = os.listdir(path)
OSError: [Errno 20] Not a directory: '1'

所以用这个命令前最好加一个判断

os.path.isdir(path)

 3>文件(夹)移动move

 递归移动一个文件或者文件夹

shutil.move('scrdir','dstdir')

移动前,dstdir是一个空目录,scrdir是一个目录里面有目录有文件

移动后

 

 需要注意的是如果目的是一个已经存在的文件,则可能会覆盖

4>文件夹压缩make_archive

shutil.make_archive('ftz','zip','dstdir')

 5>文件解压缩unpack_archive

二:pathlib模块

         pathlib是跨平台的、面向对象的路径操作模块,可适用于不同的操作系统,其操作对象是各种操作系统中使用的路径(包括绝对路径和相对路径),pathlib有两个主要的类,分别为PurePath和Path。

PurePath

PurePath访问实际文件系统的“纯路径”,只负责对路径字符串执行操作。PurePath有两个子类,即PurePosixPath和PathWindowsPath,前者用于操作UNIX(包括 Mac OS X)风格的路径,后者用于操作Windows风格的路径。

Path

Path访问实际文件系统的“真正路径”,Path对象可用于判断对应的文件是否存在、是否为文件、是否为目录等。有两个子类,即PosixPath和WindowsPath,前者用于操作UNIX(包括 Mac OS X)风格的路径,后者用于操作Windows风格的路径。

PurePath和Path的区别

Path 是 PurePath 的子类,除了支持 PurePath 的各种操作、属性和方法之外,还会真正访问底层的文件系统,包括判断 Path 对应的路径是否存在,获取 Path 对应路径的各种属性(如是否只读、是文件还是文件夹等),甚至可以对文件进行读写。

PurePath 和 Path 最根本的区别在于,PurePath 处理的仅是字符串,而 Path 则会真正访问底层的文件路径,因此它提供了属性和方法来访问底层的文件系统。

UNIX 和 Windows 风格路径区别

UNIX 风格的路径和 Windows 风格路径的主要区别在于根路径和路径分隔符,UNIX 风格路径的根路径是斜杠(/),而 Windows 风格路径的根路径是盘符(c:);UNIX 风格的路径的分隔符是斜杠(/),而 Windows 风格路径的分隔符是反斜杠(\)。

注意:

考虑到操作系统的不同,在使用 PurePath 类时,如果在 UNIX 或 Mac OS X 系统上使用 PurePath 创建对象,该类的构造方法实际返回的是 PurePosixPath 对象;反之,如果在 Windows 系统上使用 PurePath 创建对象,该类的构造方法返回的是 PureWindowsPath 对象。

考虑到操作系统的不同,Path 类的使用同 PurePath 类。

pathlib和os常用操作对比

通过常用路径操作的对比,可以更深刻理解pathlib和os的区别,便于在实际操作中做对照,也便于进行使用替代,详细对比如下:

pathlib操作os及os.path操作功能描述
Path.resolve()os.path.abspath()获得绝对路径
Path.chmod()os.chmod()修改文件权限和时间戳
Path.mkdir()os.mkdir()创建目录
Path.rename()os.rename()文件或文件夹重命名,如果路径不同,会移动并重新命名
Path.replace()os.replace()文件或文件夹重命名,如果路径不同,会移动并重新命名,如果存在,则破坏现有目标。
Path.rmdir()os.rmdir()删除目录
Path.unlink()os.remove()删除一个文件
Path.unlink()os.unlink()删除一个文件
Path.cwd()os.getcwd()获得当前工作目录
Path.exists()os.path.exists()判断是否存在文件或目录name
Path.home()os.path.expanduser()返回电脑的用户目录
Path.is_dir()os.path.isdir()检验给出的路径是一个文件
Path.is_file()os.path.isfile()检验给出的路径是一个目录
Path.is_symlink()os.path.islink()检验给出的路径是一个符号链接
Path.stat()os.stat()获得文件属性
PurePath.is_absolute()os.path.isabs()判断是否为绝对路径
PurePath.joinpath()os.path.join()连接目录与文件名或目录
PurePath.nameos.path.basename()返回文件名
PurePath.parentos.path.dirname()返回文件路径
Path.samefile()os.path.samefile()判断两个路径是否相同
PurePath.suffixos.path.splitext()分离文件名和扩展名

PurePath 类属性和方法汇总

Path 类属性和方法汇总

 

重点介绍下文件查找

  • Path.iterdir(),查找文件夹下的所有文件,返回的是一个生成器类型;
  • Path.glob(pattern),查找文件夹下所有与 pattern 匹配的文件,返回的是一个生成器类型;
  • Path.rglob(pattern),查找文件夹下所有子文件夹中与 pattern 匹配的文件,返回的是一个生成器类型。

 

iterdir方法

from pathlib import *

input_path = r"C:\Users\okmfj\Desktop\MTool工具"

# 获取文件夹下所有文件,返回文件路径(字符)列表,采用iterdir方法
[str(f) for f in Path(x).iterdir() if Path(f).is_file()]

# 获取文件夹下所有文件类型,返回文件后缀的列表,采用iterdir方法
list(set([Path(f).suffix for f in Path(x).iterdir() if Path(f).is_file()]))
# 结果: ['.pdf', '.txt', '.docx']

glob方法

from pathlib import *

input_path = r"C:\Users\okmfj\Desktop\MTool工具"

# 获取文件夹下所有文件,返回文件路径(字符)列表,采用glog方法
[str(f) for f in Path(input_path).glob(f"*.*") if Path(f).is_file()]

# 获取文件夹下所有文件,返回文件路径(字符)列表,采用glog方法
[str(f) for f in Path(input_path).glob(f"**\*.*") if Path(f).is_file()]

# 获取文件夹下所有文件类型,返回文件后缀的列表,采用glog方法
list(set([Path(f).suffix for f in Path(input_path).glob(f"*.*") if Path(f).is_file()]))
# 结果: ['.pdf', '.txt', '.docx']

# 获取文件夹下(含子文件)所有文件类型,返回文件后缀的列表,采用glog方法
list(set([Path(f).suffix for f in Path(x).glob(f"**\*.*") if Path(f).is_file()]))
# 结果: ['.pdf', '.txt', '.docx']

rglob方法

from pathlib import *

input_path = r"C:\Users\okmfj\Desktop\MTool工具"

# 获取文件夹下(含子文件)所有文件,返回文件路径(字符)列表,采用rglog方法
[str(f) for f in Path(x).rglob(f"*.*") if Path(f).is_file()]

# 获取文件夹下(含子文件)所有文件类型,返回文件后缀的列表,采用rglog方法
list(set([Path(f).suffix for f in Path(x).rglob(f"*.*") if Path(f).is_file()]))
# 结果: ['.pdf', '.txt', '.docx']

更加详细的信息可以参考:Python路径操作模块pathlib,看这篇就够了! - 知乎 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/521349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当列车穿过时空隧道:解密力扣“计算列车到站时间”

本篇博客会讲解力扣“2651. 计算列车到站时间”的解题思路&#xff0c;这是题目链接。 先来审题&#xff1a; 以下是输出示例&#xff1a; 以下是提示&#xff1a; 这道题是给大家树立信心的。计算方法&#xff1a;(预期时间延误时间)%24即可。 int findDelayedArrivalTim…

奇技淫巧第8期

学无止境。 下面是对去年11月至今年5月的零散知识点总结。 春节期间好好放松了一两个月&#xff0c;来校后又懒散的度过了一两个月&#xff0c;直到论文评审意见下来&#xff0c;才开启冲刺模式狂干了一两个月。总的来说&#xff0c;这半年来摸的时间比较多。好&#xff0c;不废…

想学好Python的话,这6本书带你从入门到精通

推荐几本在豆瓣评分很不错的Python学习书籍&#xff0c;这些书的电子版被我搜集整理了出来&#xff0c;今天分享给大家。 书籍包括《Python编程&#xff1a;从入门到实践》、《Python编程快速上手》、《流畅的Python》、《像计算机科学家一样思考Python》、《利用Python进行数…

树状数组C++详解

树状数组介绍 在学习一个算法之前一定要清楚它能干嘛&#xff0c;能解决什么样的问题&#xff0c;对你解题是否有帮助&#xff0c;然后才去学习它! 那么接下来看如下几个问题 什么是树状数组 顾名思义就是一个结构为树形结构的数组&#xff0c;于二叉树的结构类似但又不同&…

基于SpringBoot+Vue的养老院系统

【辰兮要努力】&#xff1a;hello你好我是辰兮&#xff0c;很高兴你能来阅读&#xff0c;昵称是希望自己能不断精进&#xff0c;向着优秀程序员前行&#xff01; 博客来源于项目以及编程中遇到的问题总结&#xff0c;偶尔会有读书分享&#xff0c;我会陆续更新Java前端、后台、…

【C++初阶】第十一篇:stack和queue的使用与模拟实现

文章目录 stack和queue的介绍和使用stack的介绍stack的定义方式stack的使用 queue的介绍queue的定义方式queue的使用 stack和queue的模拟实现容器适配器stack的模拟实现queue的模拟实现 总结&#xff1a; stack和queue的介绍和使用 stack的介绍 stack的文档介绍 stack是一种容…

文本三剑客之~~~sed命令

目录 sed概念sed 的工作流程&#xff1a;命令格式&#xff1a;常用选项&#xff1a;常用操作&#xff1a; 示例&#xff1a;打印删除替换&#xff1a;插入&#xff1a;剪切复制将字符替换位置 sed概念 sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提…

Allegro加密PCB文件

写在前面&#xff1a; 记得以前不知道Allegro可以加密PCB文件的时候&#xff0c;就遇到了尴尬的事情。 其一&#xff1a;要发给别人layout文件&#xff0c;但是又怕别人外传&#xff0c;而且有关于公司文件保密的问题&#xff0c;其实这不论是公事还是私事&#xff0c;如果我…

软测人正在杀死软测行业

前言、一个软件做出来&#xff0c;最不能少的人是谁&#xff1f; 不用说就是开发&#xff0c;因为开发是最了解软件运作的那个人&#xff0c;早期不少一人撸网站或者APP的例子&#xff0c;相当于一个人同时是产品、研发、测试、运维等等&#xff0c;这也是为何开发是地位和上限…

如何一步一步构建网站ChatGPT插件

在本文中&#xff0c;我们将一步一步地探索并构建一个名为"AI Prompt Testing"的项目。该项目是一个网站插件&#xff0c;旨在帮助网站生成一个ChatGPT提示测试题&#xff0c;以巩固当前网页的内容。 1、抽象提取 这个网站ChatGPT插件大概的效果&#xff0c;类比的…

股票量价关系基础知识7----图解各阶段量价关系:价涨量缩

图解各阶段量价关系&#xff1a;价涨量缩 价涨量缩是指股价上涨&#xff0c;成交量却萎缩的一种价量背离走势。它通常反映上涨力道不足&#xff0c;预示股价可能反转向下。 一、上涨初期的价涨量缩 &#xff08;一&#xff09;形态分析 股价经过一轮下跌后止跌回升&#xff0c…

Redis中的缓存穿透、雪崩、击穿

概述&#xff1a; 缓存穿透&#xff1a;大量请求根本不存在的key&#xff0c; 应用服务器压力变大缓存雪崩&#xff1a;redis中大量key集体过期&#xff0c;数据库压力变大&#xff0c;服务器崩溃缓存击穿&#xff1a;redis中一个热点key过期&#xff08;大量用户访问该热点ke…

【Linux】驱动学习,先啃框架

目录 前言&#xff1a; 一、驱动设计 &#xff08;1&#xff09;面向对象&#xff1a; &#xff08;2&#xff09;分层&#xff1a; &#xff08;3&#xff09;分离&#xff1a; 二、驱动框架 &#xff08;1&#xff09;传统框架 &#xff08;2&#xff09;总线设备驱…

四.从零开始JVM实战高手-JVM监控及线上问题定位

前言 Java程序员面试JVM几乎比问&#xff0c;对于JVM监控&#xff0c;线上OOM&#xff0c;CPU负载100%等问题也是经常被问到&#xff0c;尽管在企业中不一定轮得到我们去处理线上问题&#xff0c;但是不管是为了面试还是为了应对开发那么对于JVM线上问题处理都是必须要去了解的…

二、软件工程——Modeling

1.Undestanding Requirements System Engineering&#xff08;系统工程&#xff09; &#xff01;&#xff01;&#xff01;Requirements Engieering(需求建模&#xff09; 1.Inception&#xff08;开始&#xff09;&#xff1a;&#xff08;确认利益相关者&#xff09; 2.…

164道网络安全工程师面试题(附答案)

为了更好地帮助大家高薪就业&#xff0c;今天就给大家分享两份网络安全工程师面试题&#xff0c;一共有164道面试真题&#xff0c;希望它们能够帮助大家在面试中&#xff0c;少走一些弯路、更快拿到offer&#xff01; 93道网络安全面试题 1、什么是SQL注入攻击 2、什么是XSS…

Linux中的特殊进程:idle进程(0号进程)、init进程(1号进程,被systemd 取代 )、kthreadd进程(2号进程)

文章目录 1. Linux中的三个特殊进程&#xff1a;2. idle进程、init进程、kthreadd进程的创建3 kthreadd进程3.1 kthreadd进程的启动3.2 kthreadd进程创建子进程3.3 kthreadd的工作流程总结 4. init进程4.1 init进程的启动 4. 总结参考 1. Linux中的三个特殊进程&#xff1a; i…

【作者踩坑总结0错版】vscode配置codeql-MacBook(M1/M2芯片-arm)

文章目录 前言一、codeql是什么二、安装必备工具2.1、安装codeql-cli2.2、安装codeql仓库2.3、桌面新建文件夹2.4、安装vscode 三、配置codeql环境变量四、vscode配置codeql插件4.1、下载测试靶场4.2、生成数据库文件&#xff08;最难最多bug&#xff09;4.3、vscode配置ql数据…

[入门必看]数据结构5.3:二叉树的遍历和线索二叉树

[入门必看]数据结构5.3&#xff1a;二叉树的遍历和线索二叉树 第五章 树与二叉树5.3 二叉树的遍历和线索二叉树知识总览5.3.1_1 二叉树的先中后序遍历5.3.1_2 二叉树的层次遍历5.3.1_3 由遍历序列构造二叉树5.3.2_1 线索二叉树的概念5.3.2_2 二叉树的线索化5.3.2_3 在线索二叉树…

服务(第十九篇)mysql的备份和恢复

备份的类型&#xff1a; ①物理备份&#xff1a;备份数据库的物理文件&#xff0c;数据文件和日志文件&#xff1b; 冷备份&#xff1a;关闭数据库进行的&#xff1b; 热备份&#xff1a;数据库处于运行中状态&#xff0c;依赖于日志文件&#xff1b; 温备份&#xff1a;数…