Python模块pathlib操作文件和目录操作总结

前言

目前大家常用的对于文件和操作的操作使用 os.path 较多,比如 获取当前路径os.getcwd(),判断文件路径是否存在os.path.exists(folder) 等等。

在Python3.4开始,官方提供了 pathlib 面向对象的文件系统路径,核心的点在于 面向对象, 这也是 os.pathpathlib的本质区别

推进使用 pathlib

为什么推进使用 pathlib 呢?

来看个对比演示

>>> import os
>>> import pathlib
>>> p1 = os.getcwd()
>>> p2 = pathlib.Path.cwd()
>>> print(p1, type(p1))
/data/colinspace/temp <class 'str'>
>>> print(p2, type(p2))
/data/colinspace/temp <class 'pathlib.PosixPath'>

看到区别在于 os 返回的是 字符串, 而 pathlib.Path 返回的是 , 这个类提供了很多有用的关于文件和文件夹的内置方法

>>> p2.
p2.absolute(         p2.home(             p2.joinpath(         p2.read_bytes(       p2.stem
p2.anchor            p2.is_absolute(      p2.lchmod(           p2.read_text(        p2.suffix
p2.as_posix(         p2.is_block_device(  p2.lstat(            p2.relative_to(      p2.suffixes
p2.as_uri(           p2.is_char_device(   p2.match(            p2.rename(           p2.symlink_to(
p2.chmod(            p2.is_dir(           p2.mkdir(            p2.replace(          p2.touch(
p2.cwd(              p2.is_fifo(          p2.name              p2.resolve(          p2.unlink(
p2.drive             p2.is_file(          p2.open(             p2.rglob(            p2.with_name(
p2.exists(           p2.is_reserved(      p2.owner(            p2.rmdir(            p2.with_suffix(
p2.expanduser(       p2.is_socket(        p2.parent            p2.root              p2.write_bytes(
p2.glob(             p2.is_symlink(       p2.parents           p2.samefile(         p2.write_text(
p2.group(            p2.iterdir(          p2.parts             p2.stat(

# 检查文件夹是否存在
>>> p2.exists()
True
# 判断是否是文件is_file/文件夹is_dir
>>> p2.is_dir()
True
# 返回父级目录
>>> p2.parent
PosixPath('/data/colinspace')

pathlib 优势举例演示

1、遍历文件夹更快,因为它返回的是 generator 生成器,节省内存

# 返回生成器
>>> p2.iterdir()
<generator object Path.iterdir at 0x7fa45e767780>

>>> list(p2.iterdir())
[PosixPath('/data/colinspace/temp/file.txt'), PosixPath('/data/colinspace/temp/redis-rdr'), PosixPath('/data/colinspace/temp/django_task'), PosixPath('/data/colinspace/temp/20210923'), PosixPath('/data/colinspace/temp/java-service-check.py')]

2、支持通配符,类似 find正则匹配查找特定类型的文件

>>> p2.glob("*.py")
<generator object Path.glob at 0x7fa45e767780>

>>> list(p2.glob("*.py"))
[PosixPath('/data/colinspace/temp/java-service-check.py'), PosixPath('/data/colinspace/temp/demo_paramiko.py'), PosixPath('/data/colinspace/temp/demo_consul.py'), ... ...]

3、高效的读写文件操作

>>> p3 = pathlib.Path('1207_test.txt')
# 文件不存在的时候,写入是会默认创建
>>> p3.write_text("Hello World\nHello Pathlib!")
26
>>> p3.read_text()
'Hello World\nHello Pathlib!'

# 也可以使用 with 进行读取
>>> with p3.open() as f:
...     f.readlines()
...
['Hello World\n', 'Hello Pathlib!']
  • Path.open(mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None) 打开文件,类似内置的open函数

  • Path.read_bytes() 按照二进制模式读取

  • Path.write_bytes(data) 将文件以二进制模式打开,写入 data 并关闭;一个同名的现存文件将被覆盖。

  • Path.write_text(data, encoding=None, errors=None, newline=None)

将文件以文本模式打开,写入 data 并关闭;同名的现有文件会被覆盖。 可选形参的含义与 open() 的相同。

  • Path.read_text() 按照文件字符串模式读取

其他的方法可以参考官方文档 https://docs.python.org/zh-cn/3/library/pathlib.html

Pathlib的特殊性

pathlib同步的考虑了 Windows 路径的特性,提供了带 I/O 操作的和不带 I/O 操作的类,官方定义叫做 具体路径(带I/O)和纯路径(不带I/O)

pathlib-inheritance

只想操作路径但不想实际访问操作系统,实例化一个纯路径是必须的。比如在Linux设备上操作Windows路径,那么应该实例化一个 PureWindowsPath 而不是 WindowsPath

os.path 和 pathlib 相同函数对应表

os/os.pathpathlib
os.path.abspath()Path.absolute()
os.path.realpath()Path.resolve()
os.chmod()Path.chmod()
os.mkdir()Path.mkdir()
os.makedirs()Path.mkdir()
os.rename()Path.rename()
os.replace()Path.replace()
os.rmdir()Path.rmdir()
os.remove(), os.unlink()Path.unlink()
os.getcwd()Path.cwd()
os.path.exists()Path.exists()
os.path.expanduser()Path.expanduser() 和 Path.home()
os.listdir()Path.iterdir()
os.path.isdir()Path.is_dir()
os.path.isfile()Path.is_file()
os.path.islink()Path.is_symlink()
os.link()Path.hardlink_to()
os.symlink()Path.symlink_to()
os.readlink()Path.readlink()
os.path.relpath()PurePath.relative_to()
os.stat()Path.stat(), Path.owner(), Path.group()
os.path.isabs()PurePath.is_absolute()
os.path.join()PurePath.joinpath()
os.path.basename()PurePath.name
os.path.dirname()PurePath.parent
os.path.samefile()Path.samefile()
os.path.splitext()PurePath.stem and PurePath.suffix

原文链接 Python模块pathlib操作文件和目录操作总结

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值