python pathlib:面向对象的文件(夹)路径处理库

python pathlib:面向对象的文件(夹)路径处理库

0 背景

pathlib 是 Python 标准库中用于处理文件路径的模块。它在 Python 3.4 版本中被引入,提供了一种更直观和面向对象的方式来处理文件系统路径。pathlib 模块定义了 Path 类,用于表示文件系统中的路径。

一般,  python最基本的os.path库也可以处理系统文件路径的问题, 那相比于os.path, pathlib 库提供一些优势, 使得在很多情况下更加方便和使用:

  1. 面向对象: pathlib 使用面向对象的设计,路径被表示为对象,而不是简单的字符串。这样的设计使得代码更具可读性和可维护性。
  2. 直观的语法: pathlib 的路径拼接语法更直观,可以使用 / 操作符来拼接路径,如果是os.path, 需要使用os.path.join() 函数调用。
  3. 链式操作: pathlib 允许我们使用链式操作,例如 path / 'subdir' / 'file.txt'。这使得代码更简洁。
  4. 更吊的功能: pathlib 提供了许多额外的方法和属性,例如读取和写入文件内容的方法, 判断路径是否为文件或目录的方法等,一般实现读取写入通过open方法去实现。这样就减少了对其他模块(如 osshutil)的依赖。

1 使用

1 创建一个文件对象

from pathlib import Path

# 指定一个文件(夹)路径
new_path = Path('E:/temp/orange')

# WindowsPath('E:/temp/orange')

2 使用 / 操作符来拼接路径

# 使用 / 操作符来拼接路径:
file_path = new_path / 'apple' / 'lemon.txt'

# WindowsPath('E:/temp/orange/apple/lemon.txt')

3 判断文件(夹)是否存在

# 判断文件是否存在
new_path.exists(), file_path.exists()

# (True, False)

判断是否是文件(夹)

is_file = my_path.is_file()
is_dir = my_path.is_dir()

4 获取文件(夹)的名称/后缀

获取文件或目录的完整名称(包含后缀)

# 获取文件或目录的名称(包含后缀)
new_path.name, file_path.name

# ('orange', 'lemon.txt')

获取文件(夹)的基本名称, 不包含后缀

# 获取文件(夹)的基本名称, 不包含后缀
new_path.stem, file_path.stem

# ('orange', 'lemon')

获取文件后缀

file_path.suffix

# '.txt'

5 创建未知的路径

有时候, 我们指定的目录不存在, 甚至它的父级目录也不存在, 那么就需要创建路径中缺失的目录, 补齐路径.

file_path.parent.mkdir(parents=True, exist_ok=True)

会创建路径中缺失的目录,参数 parents=True 表示如果上级目录不存在也创建,exist_ok=True 表示如果目录已经存在则不引发异常。

6 写入内容

写入内容, 前提是首先路径存在, 如果不存在, 可以使用第5步的做法, 先创建需要补齐的路径.

# 写入文本内容, 前提是首先路径存在
file_path.write_text('Hello, Pathlib!21321',)

# 如果需要, 写入二进制内容
file_path.write_bytes(b'Hello, Pathlib!')

7 读取内容

# 读取文本内容
file_path.read_text()

8 移动/重命名文件

移动文件

# 移动文件
file_path.rename('E:/temp/orange/lemo2.txt')

重命名文件, 不修改文件的目录, 仅对文件名称进行修改.

new_file_path = file_path.with_name('name.txt')

file_path.rename(new_file_path)

file_path.with_name(new_name)pathlib.Path 对象的方法,用于返回一个具有新文件名的新路径对象,而不更改路径的其余部分。这个方法通常用于仅仅修改文件名。

在linux中, 文件移动和重命名的操作都是通过mv的命令去完成操作的.

9 获取父级目录

# 获取父级的目录
new_path.parent, file_path.parent

# (WindowsPath('E:/temp'), WindowsPath('E:/temp/orange/apple'))

10 遍历目录下所有文件(夹)

# 遍历目录中的文件和子目录
for file in new_path.iterdir():
    print(file, file.is_file())

# E:temporangedocument - 副本 (2).txt True
# E:temporangedocument - 副本.txt True
# E:temporangedocument.txt True
# E:temporangewater False    

11 获取绝对路径

通过.resolve()方法实现.

file_path.resolve()

# WindowsPath('E:/temp/orange/apple/lemon.txt')

12 路径的字符串显示

比如显示文件的绝对路径.resolve()的字符串.as_posix()

file_path2 = Path('./data/user/../admin/python.txt')
# 获取绝对路径, 并且以字符串显示, 使用`as_posix()`方法.
file_path2.resolve().as_posix()

13 删除文件(夹)

删除文件

# file_path是一个文件夹
file_path.unlink()

删除文件夹

# new_path是一个文件夹
new_path.rmdir()

删除一个目录, 删除目录以及它下面的所有文件/文件夹

有时, 确实是需要删除这个文件夹以及它下面的所有内容, 此时, 使用shutil去操作.

import shutil
from pathlib import Path

# 定义目录路径
directory_path = Path('E:/temp/orange')

# 使用 shutil.rmtree() 删除目录及其下面的所有文件和子目录
shutil.rmtree(directory_path)

shutil.rmtree() 是一个强大的操作,还是得慎用, 像rm -rf /*一样慎用.

14 获取文件的属性(大小/创建时间/修改时间/访问时间)

首先, 获取文件的属性

# 获取文件属性
file_stat = file_path.stat()

获取文件的大小

# 获取文件大小(字节数)
file_size = file_stat.st_size

获取文件的创建时间

# 获取文件创建时间
file_created_time = file_stat.st_ctime

获取文件最后的修改时间

# 获取文件修改时间
file_modified_time = file_stat.st_mtime

获取最后访问时间的时间戳

# 获取文件最后的访问时间
file_access_time = file_stat.st_atime

15 其他方法

当然, Path很强大, 也还有很多其他的方法和熟悉, 可以参考官方文档去检索:

https://docs.python.org/3/library/pathlib.html

2 关于

总体而言,如果我们在更高的python版本上操作系统文件路径,那就更推荐使用 pathlib,特别是在需要处理文件路径时。它提供了更现代、更清晰和更强大的工具来操作路径。本文主要是笔者在工作和生活中参考os.path库中常用到的比较多的一些方法, 写的Pathlib库中一些常用的操作.

最后, 欢迎关注我的微信公众号:


原文始发于微信公众号(其之):python pathlib:面向对象的文件(夹)路径处理库

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204923.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!