Python用pathlib库操作路径

在日常编码中,常常会有这些操作
在当前目录或用户目录下新建一个配置文件,
获取一个文件的路径或上级目录
这些都涉及路径操作
相信大家都使用过os.path来处理过,这个痛苦我想”谁用谁知道吧”
今天的主角pathlib就是来解决痛苦的…

pathlib简介

pathlib是跨平台的、面向对象的路径操作库,相对os.path作为string对象需要进行众多繁琐的操作对os.path进行了封装,pathlib提供了一个便捷的,面向对象的操作方式、

pathlib官方英文文档

https://pathlib.readthedocs.io/en/pep428/
里面有很多用法, 本文只是列举常用的,还有更多效果需要自己去挖掘

安装pathlib

pip install pathlib

获取上级目录

os.path实现

import os
pwd = os.getcwd()
#当前文件的父路径
father_path = os.path.abspath(os.path.dirname(pwd)+os.path.sep+".")
#当前文件的前两级目录
grandfather_path = os.path.abspath(os.path.dirname(pwd)+os.path.sep+"..")

pathlib实现

import pathlib
pwd = pathlib.Path.cwd()
pwd.parent
pwd.parent.parent

用户目录/当前目录

import pathlib
pathlib.Path.home()
pathlib.Path.cwd()

获创建路径

import pathlib
cwd = pathlib.Path.cwd()
file_path = cwd / 'my.conf'
file_path = cwd.joinpath('my.conf')

file_path.name # 获取文件名
file_path.suffix # 获取文件后缀
file_path.anchor # 获取顶级目录
file_path.root # 获取根
file_path._parts # 路径分块组合

文件操作

import pathlib
cwd_path = pathlib.Path.cwd()
file_path = cwd_path / 'my.conf'
file_path.write_text("debug = 1\n")
with file_path.open(mode='r') as fd:
    for line in fd:
        print(line)
print(file_path.read_text())

重命名/修改后缀名

file_path.replace(file_path.with_name('your.conf'))
file_path.replace(file_path.with_suffix('.py'))

分类统计目录文件数目

import pathlib
import collections
collections.Counter(p.suffix for p in pathlib.Path.cwd().iterdir())

显示目录树

import pathlib
def tree(directory):
    print(f'- {directory}')
    for path in sorted(directory.rglob('*')):
        depth = len(path.relative_to(directory).parts)
        spacer = '    ' * depth
        print(f'{spacer}+ {path.name}')
tree(pathlib.Path.cwd())

找出最后修改的文件

from datetime import datetime
directory = pathlib.Path.cwd()
time, file_path = max((f.stat().st_mtime, f) for f in directory.iterdir())
print(datetime.fromtimestamp(time), file_path)

你可能感兴趣的:(Python)