• Python文件管理


    Python文件管理

    一、 os模块

    1、 方法大纲

    2、 常用方法

    方法描述
    getcwd()获取当前工作目录
    chdir(path)将当前的工作目录更改为指定的路径
    listdir(path=None)列出指定目录中的文件名。如果 path 为 None,则使用 path=‘.’。
    mkdir(path, mode=511, *, dir_fd=None)创建目录
    makedirs(name, mode=511, exist_ok=False)递归创建多层目录
    rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)重命名文件或目录
    remove(path, *, dir_fd=None)删除文件
    rmdir(path, *, dir_fd=None)删除目录
    removedirs(name)递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空抛出异常。
    walk(top, topdown=True, onerror=None, followlinks=False)遍历 top 路径下的所有子目录,返回一个包含 3 个元素的元组:(dirpath, dirnames, filenames)。
    os.curdir指代当前目录(‘.’)
    os.pardir指代上一级目录(‘…’)
    os.sep路径分割符(Windows 为 ‘\’,Linux 为 ‘/’)
    os.linesep行终止符(Windows 为 ‘\r\n’,Linux 为 ‘\n’)
    os.name指代当前使用的操作系统(Windows 系统为 ‘nt’,Linux 为 ‘posix’)

    二、 glob模块

    1、 方法大纲

    glob模块也是Python标准库中一个重要的模块,主要用来查找符合特定规则的目录和文件,并将搜索的到的结果返回到一个列表中。使用这个模块最主要的原因就是,该模块支持几个特殊的正则通配符,用起来贼方便,这个将会在下方为大家进行详细讲解。

    2、 使用示例

    import glob
    
    path1 = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a\[0-9].png"
    print(glob.glob(path1))
    
    path2 = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a\[0-9a-z].*"
    print(glob.glob(path2))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:这个函数里面还有一个参数,recursive,当其为真时,则模式’**'将与任何文件匹配,并且
    零或更多目录和子目录。

    三、 shutil模块

    1、 方法大纲

    os模块是Python标准库中一个重要的模块,里面提供了对目录和文件的一般常用操作。而Python另外一个标准库——shutil模块,它作为os模块的补充,提供了复制、移动、删除、压缩、解压等操作,这些 os 模块中一般是没有提供的。但是需要注意的是:shutil模块对压缩包的处理是调用ZipFileTarFile这两个模块来进行的。

    2、 压缩包

    对压缩包管理是使用zipfile模块

    import zipfile
    import os
    
    file_list = os.listdir(os.getcwd())  # 获取当前目录
    # 将上述所有文件,进行打包,使用“w”
    with zipfile.ZipFile(r"我创建的压缩包.zip", "w") as zipobj:  # 对文件进行压缩
        for file in file_list:
            zipobj.write(file)  # 将文件写入压缩包中
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    四、 pathlib模块

    1、 对比图

    操作os and os.pathpathlib
    绝对路径os.path.abspathPath.resolve
    修改权限os.chmodPath.chmod
    创建目录os.mkdirPath.mkdir
    重命名os.renamePath.rename
    移动os.replacePath.replace
    删除目录os.rmdirPath.rmdir
    删除文件os.remove, os.unlinkPath.unlink
    工作目录os.getcwdPath.cwd
    是否存在os.path.existsPath.exists
    用户目录os.path.expanduserPath.expanduser and Path.home
    是否为目录os.path.isdirPath.is_dir
    是否为文件os.path.isfilePath.is_file
    是否为连接os.path.islinkPath.is_symlink
    文件属性os.statPath.stat, Path.owner, Path.group
    是否为绝对路径os.path.isabsPurePath.is_absolute
    路径拼接os.path.joinPurePath.joinpath
    文件名os.path.basenamePurePath.name
    上级目录os.path.dirnamePurePath.parent
    同名文件os.path.samefilePath.samefile
    后缀os.path.splitextPurePath.suffix

    2、 路径获取

    1. 获取当前工作目录

      import pathlib
      
      print(pathlib.Path.cwd())  # 虽然在这里打印出来的很像一个字符串,但实际上得到的是一个WindowsPath对象
      # 其实现了 __repr__ 和 __str__ 底层方法
      print(pathlib.Path(__file__))  # 获取当前文件路径
      
      • 1
      • 2
      • 3
      • 4
      • 5

      工作目录是在哪个目录下运行你的程序,不是项目目录

    2. 获取家目录

      import pathlib
      
      print(pathlib.Path.home())  # 获取当前用户的家目录
      
      • 1
      • 2
      • 3
    3. 获取文件绝对路径

      from pathlib import Path
      
      # 当前文件路径
      p = Path(__file__)
      print(p)  
      print(p.absolute())  # 将路径转换为绝对路径,p.resolve()功能也是一样的
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    4. 遍历当前目录

      from pathlib import Path
      
      # 当前文件路径
      p = Path('files')
      for i in p.iterdir():
          print(i.absolute())
      
      """运行结果:
      C:\Users\3500\PycharmProjects\untitled3\demo\files\json
      C:\Users\3500\PycharmProjects\untitled3\demo\files\username.txt
      C:\Users\3500\PycharmProjects\untitled3\demo\files\yaml
      """
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

    3、 文件属性

    from pathlib import Path
    
    # 当前文件路径
    p = Path(__file__)
    print(p.absolute())   # 获取绝对路径
    print(p.resolve())    # 获取绝对路径
    print(p.name)   # 获取文件名称 'test.py'
    print(p.stem)    # 只要文件名,不要后缀 test
    print(p.suffix)  # 获取文件 后缀.py
    print(p.suffixes)  # 文件所有的后缀 ['.py']
    print(p.parts)  # 拆分('C:\\', 'Users', '3500', 'PycharmProjects', 'untitled3', 'demo', 'test.py')
    print(p.parent)  # 获取当前路径的父级目录,C:\Users\35000\PycharmProjects\untitled3\demo
    print(p.parent.parent)  # C:\Users\3500\PycharmProjects\untitled3
    print(p.parents)  # 所有的父级 
    print(p.anchor)  # 锚,目录前面的部分 C:\ 或者 /
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4、 文件判断

    from pathlib import Path
    
    # 1.  is_file() 判断是不是文件
    print(Path.cwd().is_file())  # False
    # 2.  is_dir() 判断是不是文件夹
    print(Path.cwd().is_dir())  # True
    # exists() 判断文件是否存在
    p = Path('./data.json')
    print(p.exists())  # True or False
    from pathlib import Path
    
    # 当前文件路径
    p = Path(__file__)  # 获取当前文件的路径
    print(p.is_absolute())  # True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    5、 路径拼接

    from pathlib import Path
    
    # 当前文件路径
    p = Path('./')
    print(p.absolute())  # C:\Users\3500\PycharmProjects\untitled3\demo
    print(p.joinpath('data.json'))  # data.json
    print(p.joinpath('data.json').absolute())   # C:\Users\3500\PycharmProjects\untitled3\demo\data.json
    # 拼接多层
    print(p.joinpath('files', 'data.json'))   # files\data.json
    print(p.joinpath('files', 'data.json').absolute())  # C:\Users\3500\PycharmProjects\untitled3\demo\files\data.json
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6、 正则匹配

    使用模式匹配(正则表达式)匹配指定的路径。glob 只会匹配当前目录下, rglob 会递归所有子目录
    比如在当前脚本的 files 目录有以下文件夹和子文件

    from pathlib import Path
    
    p = Path('files')
    # glob 只会遍历查找当前目录
    print(p.glob('*.txt'))  # 
    print([i for i in p.glob('*.txt')])  # [WindowsPath('files/username.txt')]
    print([i for i in p.glob('*.yml')])  # []
    # rglob 只会遍历查找当前目录以及其子目录
    print(p.rglob('*.txt'))  # 
    print([i for i in p.rglob('*.txt')])  # [WindowsPath('files/username.txt')]
    print([i for i in p.rglob('*.yml')])  # [WindowsPath('files/yaml/aa.yml'), WindowsPath('files/yaml/bb.yml')]
    
    p_ = Path('data.json')
    # math 检查匹配规则
    print(p_.match('*.json'))  # True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    7、 读写操作

    pathlib 对读取和写入进行了简单的封装,不再需要重复去打开文件和管理文件的关闭了。

    • .read_text() 读取文本
    • .read_bytes() 读取 bytes
    • .write_text() 写入文本
    • .write_bytes() 写入 tytes
    from pathlib import Path
    
    p = Path('yo.txt')
    p.write_text("hello world")
    print(p.read_text())  # hello world
    
    • 1
    • 2
    • 3
    • 4
    • 5

    file.write 操作使用的是 w 模式,如果之前已经有文件内容,将会被覆盖。

    当然,pathlib还可以进行文件的创建,删除,以及修改操作,其与os中的方法一样,可以自行去研究

  • 相关阅读:
    海岸雷达问题(java实现)——贪心算法例题
    在python中调用abaqus和nastran的方法
    架构师 软件测试
    《Linux运维总结:内网服务器通过代理访问外网服务器(方法一)》
    【Linux】权限管理-权限的概念,umask,粘滞位
    pip 清华镜像
    Java 中的日期时间总结
    5.Flink实时项目之业务数据准备
    RabbitMQ(原理,下载,安装)
    《分析模式》漫谈10-白头神探
  • 原文地址:https://blog.csdn.net/qq_62789540/article/details/126445344