1

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

 1 year ago
source link: https://blog.51cto.com/colinspace/5919626
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

精选 原创

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

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

推进使用 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)

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

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

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

os/os.path

pathlib

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
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK