zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Spring学习-- AOP入门动态代理
    Spring学习--泛型依赖注入
    Spring学习--通过注解配置 Bean (三)
    Spring学习--通过注解配置 Bean (二)
    Spring学习--通过注解配置 Bean (一)
    十 字符串处理
    九 Shell中的数组
    八使用Shell函数
    七 循环结构
    六、流程控制语句
  • 原文地址:https://www.cnblogs.com/kcxg/p/14943270.html
Copyright © 2011-2022 走看看