教育行业网站怎么做,深圳网站建设 利科技有限公司,搭建网站的步骤有哪些,营销效果评估与分析在 python 当中#xff0c;如果你想控制路径#xff0c;基本上绕不开 os.path。我希望看完这篇文章以后#xff0c;熟练使用 python 的你能立刻开始使用 pathlib 模块#xff0c;一刻也不要耽误。pathlib 相对于 os.path 有以下优势#xff1a;pathlib 导入更加清晰#…在 python 当中如果你想控制路径基本上绕不开 os.path。我希望看完这篇文章以后熟练使用 python 的你能立刻开始使用 pathlib 模块一刻也不要耽误。pathlib 相对于 os.path 有以下优势pathlib 导入更加清晰采用面向对象编程能同时存储更多状态os.path 返回的通常只有一个字符串pathlib 使用更简单获取路径相关信息pathlib 会把路径相关信息都存在一个 Path 的核心类里面比如用户名后缀名上层目录文件创建时间文件大小等等。 这些 os.path 是没有办法一次性都给我们的因为 os.path 调用的函数几乎都是返回字符串格式不能像 Path 对象这样保存状态。1, 获取当前文件路径。这种操作方式可能会包含相对路径信息。# 获取当前路径current_path Path(__file__)print(current_path)2当前文件夹路径。current_path Path(.)print(current_path)3, 获取当前文件和文件夹的元信息。st current_path.stat()print(st)# 文件大小print(st.st_size)# 文件时间print(st.st_atime)4Path(‘.’) 这种方式可以包含相对路径 ../doc 等如果要获取绝对路径要使用 resolve 获取绝对路径。current_path.resolve()如果路径不存在 是不会抛出异常的。如果想抛出异常可以设置参数 strict 设为 True抛出 FileNotFoundError。current_path.resolve(strictTrue)5, 获取父目录。这是 os.path 最被人诟病的一点你需要不停的通过 os.path.dirname() 去获取父目录层级多了心都碎了。 在 pathlib 里因为采用的是对象形式可以直接通过 parent 属性获取父目录父目录同时也是一个 Path 对象照样可以用 parent 去获取目录。parent current_path.parent.parent.parent6, 如果需要不停的返回上一级目录不停的 parent 属性也会让人不厌其烦。pathlib 提供了一种更灵活的机制让你去获取高层父目录, 就是 parents 属性。 parents 会把从根目录开始的所有层级都保存起来直接通过索引获取对应层级就可以了。parents current_path.parentfirst_p parents[0]second_p parents[1]这里有一点非常遗憾pathlib 没有支持逆向索引也就是说不能通过 parents[-2] 去达到和 current_path.parent.parent 相同的效果。在实际应用中这种场景用得还是挺多的需要通过某个文件获取上层路径上上层路径。# TODO: 可以封装的技能,目前未实现parents[-3]提供一种封装思路def my_parents(self, nagtive_num):....return self.parents[len(current_path.parents) nagtive_num]还有一种思路重写源码中的 __getitem__ 方法这里不做深入阐述。7 获取文件名称name current_path.name8, 获取文件后缀名。file_suffix current_path.suffix9获取不含后缀名的文件名。file_without_suffix current_path.stem路径操作1with_name, 改变文件名, 生成新路径实际文件不发生变化.# 改变文件名为 new_name.py生成新路径实际文件不发生变化# 原来的文件名封装在 current_path 对象中with_name current_path.with_name(new_name.py)2 with_suffix 改变后缀名。# 改变后缀名生成新路径实际文件不发生变化with_suffix current_path.with_suffix(.new_suffix)3 路径拼接。 pathlib 提供了和 os.path.join() 类似的路径拼接方式new_path current_path.joinpath(join_path)更重要的是他提供了一种更直观的方式 /new_path current_path / lemon/yuze / yuze_again这种方式的实现原理学过测试开发课程的同学应该很容易想到定义一个除法运算的魔术方法就可以。思考pathlib 可以完全代替 os.path 吗