• Python 文件路径对象 Path


    Python 文件路径 Path


    参考文档:
    pathlib --- 面向对象的文件系统路径

    使用from pathlib import Path 替代 os.path ,

    已面向对象的方式进行文件路近操作

    打印当前的路径

    from pathlib import Path
    print(Path.cwd())
    

    判断路径是否存在

    from pathlib import Path
    tmp = Path("/Users/aaron/tmp")
    tmp.exists()
    

    显示文件夹的内容

    from pathlib import Path
    tmp = Path("/Users/aaron/tmp")
    list(tmp.iterdir())
    

    Path().iterdir 返回的是一个生成器,这在目录内文件特别多的时候可以大大节省内存,提升效率。

    os 不支持含有通配符的路径,但 pathlib 可以

    list(Path("/tmp").glob("*.txt"))
    

    便捷的读写文件操作

    f = Path('test_dir/test.txt'))
    f.write_text('This is a sentence.')
    f.read_text()
    

    也可以使用 with 语句

    # 读取文件
    p = Path('setup.py')
    with p.open() as f: f.readline()
    

    获取文件的元数据

    In [56]: p = Path("/Users/aaron/tmp/c.py")
    
    In [57]: p.stat()
    Out[57]: os.stat_result(st_mode=33188, st_ino=35768389, st_dev=16777221, st_nlink=1, st_uid=501, st_gid=20, st_size=20, st_atime=1620633580, st_mtime=1620633578, st_ctime=1620633578)
    
    In [58]: p.parts
    Out[58]: ('/', 'Users', 'aaron', 'tmp', 'c.py')
    
    In [59]: p.parent
    Out[59]: PosixPath('/Users/aaron/tmp')
    
    In [60]: p.resolve()
    Out[60]: PosixPath('/Users/aaron/tmp/c.py')
    
    In [61]: p.exists()
    Out[61]: True
    
    In [62]: p.is_dir()
    Out[62]: False
    
    In [63]: p.is_file()
    Out[63]: True
    
    In [64]: p.owner()
    Out[64]: 'aaron'
    
    In [65]: p.group()
    Out[65]: 'staff'
    
    In [66]: p.name
    Out[66]: 'c.py'
    
    In [67]: p.suffix
    Out[67]: '.py'
    
    In [68]: p.suffixes
    Out[68]: ['.py']
    
    In [69]: p.stem
    Out[69]: 'c'
    
    

    路径的连接 join

    很直观的使用一个 /直接进行连接路径

    >>> p = PurePosixPath('foo')
    >>> p / 'bar'
    PurePosixPath('foo/bar')
    >>> p / PurePosixPath('bar')
    PurePosixPath('foo/bar')
    >>> 'bar' / p
    PurePosixPath('bar/foo')
    

    也可以使用 joinpath 方法

    >>> PurePosixPath('/etc').joinpath('passwd')
    PurePosixPath('/etc/passwd')
    >>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd'))
    PurePosixPath('/etc/passwd')
    >>> PurePosixPath('/etc').joinpath('init.d', 'apache2')
    PurePosixPath('/etc/init.d/apache2')
    >>> PureWindowsPath('c:').joinpath('/Program Files')
    PureWindowsPath('c:/Program Files')
    

    路径匹配

    >>> PurePath('a/b.py').match('*.py')
    True
    >>> PurePath('/a/b/c.py').match('b/*.py')
    True
    >>> PurePath('/a/b/c.py').match('a/*.py')
    False
    

    获取用户目录

    from pathlib import Path
    
    Path.home()
    PosixPath('/Users/aaron')
    

    父目录的层级获取

    >>> p = PureWindowsPath('c:/foo/bar/setup.py')
    >>> p.parents[0]
    PureWindowsPath('c:/foo/bar')
    >>> p.parents[1]
    PureWindowsPath('c:/foo')
    >>> p.parents[2]
    PureWindowsPath('c:/')
    

    获取多个文件后缀

    >>> PurePosixPath('my/library.tar.gar').suffixes
    ['.tar', '.gar']
    >>> PurePosixPath('my/library.tar.gz').suffixes
    ['.tar', '.gz']
    >>> PurePosixPath('my/library').suffixes
    []
    

    Windows 风格转 Posix

    >>> p = PureWindowsPath('c:\windows')
    >>> str(p)
    'c:\windows'
    >>> p.as_posix()
    'c:/windows'
    

    获取文件的 uri

    >>> p = PurePosixPath('/etc/passwd')
    >>> p.as_uri()
    'file:///etc/passwd'
    >>> p = PureWindowsPath('c:/Windows')
    >>> p.as_uri()
    'file:///c:/Windows'
    

    判断是否绝对路径

    >>> PurePosixPath('/a/b').is_absolute()
    True
    >>> PurePosixPath('a/b').is_absolute()
    False
    
    >>> PureWindowsPath('c:/a/b').is_absolute()
    True
    >>> PureWindowsPath('/a/b').is_absolute()
    False
    >>> PureWindowsPath('c:').is_absolute()
    False
    >>> PureWindowsPath('//some/share').is_absolute()
    True
    

    文件名若有变化

    >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
    >>> p.with_name('setup.py')
    PureWindowsPath('c:/Downloads/setup.py')
    

    删除文件

    删除文件或快捷方式

    from pathlib import Path
    tmp_img = Path(img_path)
    tmp_img.unlink()
    
    
  • 相关阅读:
    vue中点击复制粘贴功能
    node.js之爬虫
    node.js初识12
    webapp定位
    Nginx工作原理和优化
    Android 命名规范 (提高代码可以读性)
    VS2015如何自定义类模板、我的模板——原来这么简单!
    VS2010中新控件的编程------颜色按钮类和颜色对话框
    WinForm创建自定义控件
    Android--MVP设计模式实践
  • 原文地址:https://www.cnblogs.com/dapenson/p/15087619.html
Copyright © 2020-2023  润新知