pathlib:优雅的路径处理库

一、常规的方法是用os库实现

获取代码当前路径,然后join当前路径后面的文件夹,再join文件夹里的文件。

import os

data_dir = os.path.join(os.getcwd(), "data")

data_file = os.path.join(data_dir, "data.csv")

上述能正常运行,但有点麻烦。那用一行写,简单点是下面这样

import os

data1_file = os.path.join(os.path.join(os.getcwd(), "data"), "data1.csv")

好像行数是少了,但是嵌套关系让这代码的可读性大大降低。而且写代码时多一个括号或少一个括号就容易出bug。

三、pathlib如何处理这种情景的

from pathlib import Path

data1_file = Path.cwd() / "data" / "data1.csv"

en,比os简洁一些了。但是这样好像看着有点别扭。我们还是喜欢用函数或者方法的形式拼接

#代码有点长,不过可读性已经很强了。
data1_file = Path.cwd().joinpath("data").joinpath("data1.csv")

其实还可以简洁点,可读性又有保障。

parts = ["data", "data1.csv"]

data1_file = Path.cwd().joinpath(*parts)

四、pathlib库中的对象

from pathlib import Pathimport os

parts = ["data", "data1.csv"]

data1_file = Path.cwd().joinpath(*parts)
print(type(data1_file))

data_file = os.path.join(os.path.join(os.getcwd(), "data"), "data.csv")
print(type(data_file))
<class 'pathlib.PosixPath'>
<class 'str'>

os方法处理的路径是字符串,但是pathlib返回的路径是一种类。pathlib.PosixPath使得pathlib的路径有新的好用的方法。

from pathlib import Path

path = '/Users/suosuo/Desktop/pathlib学习/data/pathlib文件路径信息处理.md'

p_obj = Path.cwd().joinpath(*parts)

#路径是否是文件夹
print(p_obj.is_dir())

#将路径拆分
print(p_obj.parts)

#该路径的父母路径
print(p_obj.parent)
False
('/', 'Users', 'suosuo', 'Desktop', 'pathlib学习', 'data', 'pathlib文件路径信息处理.md')
/Users/suosuo/Desktop/pathlib学习/data
posted @ 2021-06-28 10:12  侃豺小哥  阅读(184)  评论(0编辑  收藏  举报