美文网首页
python标准库pathlib常见操作

python标准库pathlib常见操作

作者: 何物昂 | 来源:发表于2018-05-24 22:48 被阅读0次

    pathlib—— 面向对象的文件系统路径
    它是python3.4新增的一个标准库,提供了不同操作系统下文件系统路径的操作方式,有两大类一个是纯路径不带I/0操作,另一个可以进行I/0的类。pathlib各个类的继承关系如下图:

    图来自python官方文档
    一般情况,对pathlib不熟悉,用Path就够了,它功能足够强大,个人觉得与相比os.path相比,更加人性化。下文将介绍一些常见操作:

    构建Path类路径对象

    pathlib中不区分路径分隔符的,在win系统下可以直接用'/'。还可以用 / 创建子路径。感觉比直接字符串拼接和利用os.path.join()更加简洁

    from pathlib import Path, PurePath
    
    #直接传进一个完整字符串
    p = Path('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
    #也可以传进多个字符串
    p = Path('C:\\', 'Users', 'dongh', 'Documents', 'python_learn', 'pathlib_', 'file1.txt')
    
    #也可以利用Path.joinpath()
    p = Path('C:/Users/dongh/Documents).joinpath('python_learn/pathlib_/file1.txt')
    #PosixPath('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
    
    #利用 / 可以创建子路径
    p = Path('C:/Users/dongh/Documents)
    p = p / 'python_learn/pathlib_/file1.txt'
    print(p)
    #PosixPath('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
    

    了解对象基本情况

    获取上一级路径

    p = Path('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
    #获取路径上一级目录路径
    print(p.parent)#pathlib_\folder1
    
    #获取上上一级目录路径
    print(p.parent.parent)
    
    #结果
    C:\Users\dongh\Documents\python_learn\pathlib_
    C:\Users\dongh\Documents\python_learn
    

    获取路径组件名字(返回的是字符串)

    #获取当前路径文件名的后缀名
    #获取当前路径文件名不带后缀
    #获取-当前路径文件名带后缀
    print(p.suffix)
    print(p.stem)
    print(p.name)#pathlib_\folder1
    
    #获取上一级目录路径名字
    print(p.parent.name)
    
    #获取上上一级目录路径名字
    print(p.parent.parent.name)
    
    #结果
    .txt
    file1
    file1.txt
    
    pathlib_
    python_learn
    

    将路径分成不同组分(返回一个元组)

    print(p.parts)
    #('C:\\', 'Users', 'dongh', 'Documents', 'python_learn', 'pathlib_', 'file1.txt')
    

    深入了解对象

    哈哈,简单了解对象的是不够的~~~万一对象不存在呢
    判断对象属性

    #判断对象是否存在,存在返回True,反之返回False
    p.exists()
    #判断对象是否是目录,存在返回True,反之返回False
    p.is_dir()
    #判断对象是否是文件,存在返回True,反之返回False
    p.is_file()
    

    遍历文件夹下的路径

    #p指向的是一个文件不是文件夹。它的上一级才是文件
    for i in p.parent.iterdir():
        print(i,)
    """
    C:\Users\dongh\Documents\python_learn\pathlib_\file1
    C:\Users\dongh\Documents\python_learn\pathlib_\file2
    C:\Users\dongh\Documents\python_learn\pathlib_\folder1
    C:\Users\dongh\Documents\python_learn\pathlib_\folder2
    C:\Users\dongh\Documents\python_learn\pathlib_\folder3
    C:\Users\dongh\Documents\python_learn\pathlib_\test.py
    C:\Users\dongh\Documents\python_learn\pathlib_\file1.txt
    """
    

    有目的寻找

    #* 表示匹配任意字符串,但这只能在当前目录下寻找
    for i in p.parent.glob('*.txt'):
        print(i)
    '''
    C:\Users\dongh\Documents\python_learn\pathlib_\file1.txt
    C:\Users\dongh\Documents\python_learn\pathlib_\file2.txt
    '''
    
    #寻找当前路径的下一路径的内容
    for i in p.parent.glob('*/*.txt'):
        print(i)
    '''
    C:\Users\dongh\Documents\python_learn\pathlib_\folder1\folder_file1.txt
    C:\Users\dongh\Documents\python_learn\pathlib_\folder2\folder2.txt
    '''
    
    #寻找当前路径下所有符合条件文件
    #' ** '意思当前路径和它的所有子路径,相当于循环匹配一遍子路径
    #和Path.rglob()效果一样
    for i in p.parent.glob('**/*.txt'):#for i in p.parent.rglob('*.txt')
        print(i)
    '''
    C:\Users\dongh\Documents\python_learn\pathlib_\file1.txt
    C:\Users\dongh\Documents\python_learn\pathlib_\file2.txt
    C:\Users\dongh\Documents\python_learn\pathlib_\folder1\folder_file1.txt
    C:\Users\dongh\Documents\python_learn\pathlib_\folder1\sub_folder1\sub_file1.txt
    C:\Users\dongh\Documents\python_learn\pathlib_\folder2\folder2.txt
    '''
    

    对对象动点手脚

    写入数据

    #写入二进制数据
    p.write_bytes(b'hello world!')
    #写入文本
    p.write_text('hello world!')
    
    #打开文件可以发现文件内有'hello world!'。
    

    读取数据

    #读二进制数据
    print(p.read_bytes())
    #b'hello world!'
    
    #读文本
    p.read_text()
    #'hello world!'
    

    Path.open()和内置open()差不多

    with p.open('r') as f:
        print(f.read())
    #hello world!
    with p.open('w') as f:
        f.write('hello again!')
    

    给对象改个名字

    p.rename('new_file.txt')
    #原来的'file1.txt'被改成new_file.txt',文件内的内容不变。
    

    创造新的路径

    p.mkdir()
    #将创建一个名为p.name的新文件夹。
    p.rmdir()
    #将删除这个文件夹,它必须是空的才能够删除
    

    判断文件是否一样

    print(p.samefile('file1.txt'))
    #返回True
    

    改变新的路径或后缀名并返回新的路径(原来的路径不被改变)

    print(p.with_name('new_file1.txt'))
    'C:/Users/dongh/Documents/python_learn/pathlib_/new_file1.txt'
    print(p.with_suffix('.csv'))
    'C:/Users/dongh/Documents/python_learn/pathlib_/file1.csv'
    

    更多详细内容请查看python官方教程
    其他文章
    python制作字符表格
    python爬取必应学术
    python控制台动画

    相关文章

      网友评论

          本文标题:python标准库pathlib常见操作

          本文链接:https://www.haomeiwen.com/subject/sefejftx.html