zoukankan      html  css  js  c++  java
  • Python

    前言

    之前曾介绍过Python的os库详细使用方式,具体可看看这篇博文:https://www.cnblogs.com/poloyy/p/12341231.html

    博主在学完os库之后,就开始投入使用了,在项目中我们一般需要让 路径可配置 ,什么意思?假设你现在有个项目A,里面有些变量存储了文件路径,如: project_path = C:UsersuserDesktoppymoocInterface ;想象下,当你换了个电脑,你的项目不在放在C盘下的时候,你这个变量是不是就失效了,此时你就要手动改路径,改来改去....维护成本极高;所以博主后面就用了os库去完成路径可配置,具体代码如下,大家完全可以复用的哈

    首先,我的项目目录结构是这样的

    1. BaseSettings 文件存放的就是项目通用的常量,譬如项目路径 project_path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0] 
    2. 当我想获取 config 文件夹下的 config.ini 时,我的变量就是 configIni_path = os.path.join(project_path, "config", "config.ini") ,以此类推~
    3. 可以看到,其实还是蛮长一行代码的,并且需要由内而外的阅读代码;
    4. 无独有偶,接触到了 pathlib 库之后,发现原来它有这么好用,并且可以完全替代 os.path 

    pathlib 的简单介绍

    • 官方定义:Object-oriented filesystem paths(面向对象的文件系统路径)
    • 官方推荐:pathlib是一个从3版本开始就能完全替代os.path的内置库,在python官网中这样说 "对于字符串的低级路径操作,您也可以使用该 os.path模块"

    pathlib和os.path的比较

    1. 当需要找多个层级的目录路径时,通过 os.path 需要嵌套写法,如我上面的 project_path ,而 pathlib 可以提供链式写法,简洁明了
    2. os.path 只用于处理路径,如果你想在获取到的路径下做一些事情(如:创建一个目录),你就需要用 os 模块,而 pathlib 可以一站式搞定,将在后面展开讲

    从这开始,我们通过os.path和pathlib的比较他们的代码量和实现方式

    获取当前文件路径

    os模块获取当前文件路径

    import os
    
    v2 = os.getcwd()
    
    # 输出 F:moocInterface

    pathlib 获取当前文件路径

    from pathlib import Path
    
    v = Path.cwd()
    
    # 输出 F:moocInterafce

    获取上层、上上层目录

    os 获取上上层目录

    import os
    
    print(os.path.dirname(os.path.dirname(os.getcwd()))) # F:

    很明显用os的写法就是嵌套式调用

    pathlib 获取上上层目录

    from pathlib import Path
    
    print(Path.cwd().parent.parent)  # F:

    而用pathlib就是链式调用

    拼接目录

    场景:在当前目录的父级目录拼接 test 文件夹下的 test.txt 

    os 拼接目录

    import os
    
    os.path.join(os.path.dirname(os.getcwd()),"test","test.txt")

    pathlib 拼接目录

    from pathlib import Path
    
    paths = ["test","test.txt"]
    Path.cwd().parent.joinpath(*paths)

    创建文件夹并重命名

    os模块

    import os
    import os.path
    
    # 创建 peoject/test目录
    os.makedirs(os.path.join('project', 'test'), exist_ok=True)
    
    # 将test.txt 重命名为 project/tests.txt
    os.rename('test.txt', os.path.join('project', 'tests.txt'))

    pathlib模块的Path对象

    from pathlib import Path
    
    # 创建 project/test目录
    Path('project/test').mkdir(parents=True, exist_ok=True)
    
    # 将test.txt 重命名为 project/tests.txt
    Path('test.txt').rename('project/test.txt')

    os和pathlib的对应关系

    pathlib的常用基本方法

    Path.parents  # 返回所有上级目录的列表
    
    Path.parts  # 分割路径 类似os.path.split(), 不过返回元组
    
    Path.root  # 返回路径的根目录

    pathlib的常用基本方法

    Path.is_dir()  # 判断是否是目录
    
    Path.is_dir()  # 是否是文件
    
    Path.exists()  # 判断路径是否存在
    
    Path.open()  # 打开文件(支持with)
    
    Path.resolve()  # 返回绝对路径
    
    Path.cwd()  # 返回当前目录
    
    Path.iterdir()  # 遍历目录的子目录或者文件
    
    Path.mkdir()  # 创建目录
    
    Path.rename()  # 重命名路径
    
    Path.unlink()  # 删除文件或目录(目录非空触发异常)
    
    Path.joinpath()  # 拼接路径
  • 相关阅读:
    练习1-17 编写一个程序,打印长度大于80个字符的所有输入行.
    练习1-16 修改打印最长文本行的程序的主程序main, 使之可以打印任意长度的输入行的长度, 并尽可能多的打印文本。
    惠普Z620工作站用安装版装win7旗舰版64位结果找不到硬盘
    输入元素( Input Element)
    GradientStop
    qml关键字style
    opacity
    QT5-step-by-step-LayoutManagement
    QT5-step-by-step-BasicKnowledge
    Adeneo Embedded: Building Qt 5.1 for Freescale i.MX6Introduction on LTIB
  • 原文地址:https://www.cnblogs.com/poloyy/p/12435628.html
Copyright © 2011-2022 走看看