一、常规的方法是用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
原文:https://blog.51cto.com/15069487/2581391