当前位置 : 主页 > 编程语言 > python >

#yyds干货盘点#python之面向对象的文件系统路径

来源:互联网 收集:自由互联 发布时间:2022-06-15
pathlib面向对象的文件系统路径 该模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的 纯路径,以及从纯路径继承而来但提供

pathlib面向对象的文件系统路径

该模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的 纯路径,以及从纯路径继承而来但提供 I/O 操作的 具体路径。

在一些用例中纯路径很有用,例如:

  • 如果你想要在 Unix 设备上操作 Windows 路径(或者相反)。你不应在 Unix 上实例化一个 WindowsPath,但是你可以实例化 PureWindowsPath。
  • 你只想操作路径但不想实际访问操作系统。在这种情况下,实例化一个纯路径是有用的,因为它们没有任何访问操作系统的操作。
  • 基础使用

    导入主类:

    >>> from pathlib import Path

    列出子目录:

    >>> p = Path('.')
    >>> [x for x in p.iterdir() if x.is_dir()]
    [PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'),
    PosixPath('__pycache__'), PosixPath('build')]

    列出当前目录树下的所有 Python 源代码文件:

    >>> list(p.glob('**/*.py'))
    [PosixPath('test_pathlib.py'), PosixPath('setup.py'),
    PosixPath('pathlib.py'), PosixPath('docs/conf.py'),
    PosixPath('build/lib/pathlib.py')]

    在目录树中移动:

    >>> p = Path('/etc')
    >>> q = p / 'init.d' / 'reboot'
    >>> q
    PosixPath('/etc/init.d/reboot')
    >>> q.resolve()
    PosixPath('/etc/rc.d/init.d/halt')

    查询路径的属性:

    >>> q.exists()
    True
    >>> q.is_dir()
    False

    打开一个文件:

    >>> with q.open() as f: f.readline()
    ...
    '#!/bin/bash\n'

    class pathlib.PurePosixPath(*pathsegments)

    一个 PurePath 的子类,路径风格不同于 Windows 文件系统:

    >>> PurePosixPath('/etc')
    PurePosixPath('/etc')

    pathsegments 参数的指定和 PurePath 相同。

    class pathlib.PureWindowsPath(*pathsegments)

    PurePath 的一个子类,路径风格为 Windows 文件系统路径:

    >>> PureWindowsPath('c:/Program Files/')
    PureWindowsPath('c:/Program Files')

    pathsegments 参数的指定和 PurePath 相同。

    无论你正运行什么系统,你都可以实例化这些类,因为它们提供的操作不做任何系统调用。


    通用性质

    路径是不可变并可哈希的。相同风格的路径可以排序与比较。这些性质尊重对应风格的大小写转换语义:

    >>>

    >>> PurePosixPath('foo') == PurePosixPath('FOO')
    False
    >>> PureWindowsPath('foo') == PureWindowsPath('FOO')
    True
    >>> PureWindowsPath('FOO') in { PureWindowsPath('foo') }
    True
    >>> PureWindowsPath('C:') < PureWindowsPath('d:')
    True

    不同风格的路径比较得到不等的结果并且无法被排序:

    >>> PureWindowsPath('foo') == PurePosixPath('foo')
    False
    >>> PureWindowsPath('foo') < PurePosixPath('foo')
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: '<' not supported between instances of 'PureWindowsPath' and 'PurePosixPath'

    运算符

    斜杠 / 操作符有助于创建子路径,就像 os.path.join() 一样:>>>

    >>> p = PurePath('/etc')
    >>> p
    PurePosixPath('/etc')
    >>> p / 'init.d' / 'apache2'
    PurePosixPath('/etc/init.d/apache2')
    >>> q = PurePath('bin')
    >>> '/usr' / q
    PurePosixPath('/usr/bin')

    文件对象可用于任何接受 os.PathLike 接口实现的地方。

    >>> import os
    >>> p = PurePath('/etc')
    >>> os.fspath(p)
    '/etc'

    路径的字符串表示法为它自己原始的文件系统路径(以原生形式,例如在 Windows 下使用反斜杠)。你可以传递给任何需要字符串形式路径的函数。

    >>> p = PurePath('/etc')
    >>> str(p)
    '/etc'
    >>> p = PureWindowsPath('c:/Program Files')
    >>> str(p)
    'c:\\Program Files'

    类似地,在路径上调用 bytes 将原始文件系统路径作为字节对象给出,就像被 os.fsencode() 编码一样:>>>

    >>> bytes(p)
    b'/etc'
    上一篇:Django API 开发:实现用户登录与注册
    下一篇:没有了
    网友评论