zoukankan      html  css  js  c++  java
  • Python中路径操作

    1. os.path模块

    3.4版本之前使用os.path模块,3.4版本之后建议使用pathlib模块

    方法 解释
    path.join 拼接一个路径出来
    path.exists 判断该路径是否存在
    path.split 将路径切割成头和尾的一个元组
    path.abspath 返回一个绝对路径
    path.dirname 返回‘目录’
    path.basename 返回路径的最后一部分
    >>> from os import path
    >>> p = path.join('/usr','local/httpd/httpd.conf')
    >>> p
    '/usr/local/httpd/httpd.conf'
    >>> type(p)
    <class 'str'>
    >>> path.dirname(p)
    '/usr/local/httpd'
    >>> path.basename(p)
    'httpd.conf'
    >>> path.split(p)
    ('/usr/local/httpd', 'httpd.conf')
    
    >>> p
    '/etc/local/http/httpd.conf'
    >>> while p != path.dirname(p):
    ...      p = path.dirname(p)
    ...      print(p,path.basename(p))
    ... 
    /etc/local/http http
    /etc/local local
    /etc etc
    /
    

    2. pathlib模块

    from pathlib import Path
    Path中返回的是一个Path对象,而os.path中返回的是一个字符串。

    2.1 目录操作

    初始化:

    >>> p = Path() # 当前目录
    >>> p = Path('a','b','c/d') # 当前目录下的a/b/c/d
    >>> p = Path('/etc') # 根下的etc目录
    
    属性 解释
    parts 返回路径中的每一个部分
    joinpath 连接多个字符串到Path对象中
    parent 目录的逻辑父目录
    parents 父目录序列,索引0是直接的父
    name 目录中的最后一部分
    suffix 目录中的最后一部分的扩展名
    stem 目录的最后一个部分,没有后缀
    suffixes 返回多个扩展名列表
    with_suffix(suffix) 补充扩展名到路径的尾部,返回新的路径,扩展名存在则无效
    with_name(name) 替换目录最后一个部分并返回一个新的路径
    >>> p = Path('/usr/local/httpd/httpd.conf')
    >>> p.name
    'httpd.conf'
    >>> p.stem
    'httpd'
    >>> p.suffix
    '.conf'
    >>> p.with_name('httpd.txt')
    PosixPath('/usr/local/httpd/httpd.txt')
    
    属性 解释
    cwd() 返回当前工作目录
    home() 返回当前家目录
    is_dir() 是否是目录
    is_file() 是否是普通文件
    is_symlink() 是否是软链接
    is_socket() 是否是socket文件
    is_block_device() 是否是块设备
    is_absolute() 是否是绝对路径
    resolve() 返回一个新的路径,该路径是当前Path的绝对路径,如果是软连接则被解析
    absolute() 获取绝对路径,推荐使用resolve()
    exists() 目录或者文件是否存在
    rmdir() 删除空目录,没有提供判断目录为空的方法
    touch() 创建一个文件
    as_uri() 将路径解析成url
    mkdir() 创建目录

    判断目录:

    >>> Path.cwd()
    PosixPath('/home/yanfa')
    >>> Path.home()
    PosixPath('/home/yanfa')
    >>> p = Path('/home/yanfa')
    >>> p
    PosixPath('/home/yanfa')
    >>> p.is_dir()
    True
    >>> p.is_file()
    False
    >>> p.is_absolute()
    True
    

    创建目录:

    >>> p = Path()
    >>> p /= 'a/b/c/d'
    >>> p.exists()
    False
    >>> p.mkdir() # FileNotFoundError
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/python3.6/lib/python3.6/pathlib.py", line 1248, in mkdir
        self._accessor.mkdir(self, mode)
      File "/usr/local/python3.6/lib/python3.6/pathlib.py", line 387, in wrapped
        return strfunc(str(pathobj), *args)
    FileNotFoundError: [Errno 2] No such file or directory: 'a/b/c/d'
    >>> p.mkdir(parents=True)
    >>> p.exists()
    True
    

    通配符匹配:

    • glob(pattern) 匹配给定的模式
    • rglob(pattern) 匹配给定的模式,递归目录,返回一个生成器
    • match(pattern) 模式匹配,成功返回True
    >>> p = Path()
    >>> list(p.glob('h*'))
    [PosixPath('h'), PosixPath('hello')]
    >>> list(p.glob('**/*.py'))
    [PosixPath('pass_py.py')]
    >>> g = p.rglob('*.py')
    >>> next(g)
    PosixPath('pass_py.py')
    >>> next(g)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration
    >>> p = Path('a/b/c/d')
    >>> p = Path('a/b/c/ddd.py')
    >>> p.match('d*.py')
    True
    >>> p.match('c/d*.py')
    True
    >>> p.match('b/*/d*.py')
    True
    

    查看文件或者目录属性信息

    • stat() 如同linux里面的stat命令
    • lstst() 同stat(),但是如果是符号链接,就显示链接本身的信息

    2.2 文件操作

    • open(mode='r', buffering=-1, encoding=None, errors=None, newline=None如何内建的open,返回一个文件对象。
    • read_bytes() 以'rb'读取路径中对应的文件,并返回二进制流。
    • read_text() 以'rt'读取路径中对应的文件,并返回文本。
    • write_bytes(date) 以‘wb’方式写入数据到路径对应文件。
    • write_text(data) 以‘wt’方式写入数据到路径对应的文件。
    >>> from pathlib import Path
    >>> p = Path('hello')
    >>> p.write_text('hello python')
    12
    >>> p.read_text()
    'hello python'
    >>> with p.open() as f:
    ...      print(f.read())
    ... 
    hello python
    

    3. shutil模块

    3.1 os模块

    • os.name 返回操作系统
    • os.uname() 显示当前操作系统的详细信息
    • sys.platform 返回当前操作系统
    • os.listdir() 返回目录内容的列表
    • os.stat() 如何stat
    • os.chmod() 修改文件的权限
    • os.chown() 改变文件的属主,属组

    3.2 shutil模块

    shutil模块提供了对文件的高级操作,特别是针对文件的复制和移动。

    • copyfileobj(fsrc, fdst[, length]) 文件对象的复制,复制内容。
    • copyfile(src, dst, *, follow_symlinks=True) 复制文件内容,不含元数据
    • copymode() 仅仅复制权限
    • copystat() 复制元数据,stat包含权限
    • copy() 复制文件内容、权限和部分元数据,不包括创建时间和修改时间
    • rmtree() 递归删除,同rm -rf一样
    • move(src,dst,copy_function=copy2) 递归移动文件,目录到目录路径。
  • 相关阅读:
    看Web视频整理标签笔记
    公文流转系统进度
    文件和流课堂实验三
    文件和流课堂实验二
    2018/10/21动手动脑
    第二次实验报告动手动脑
    2018.10.11上课进度说明
    原码反码补码
    课上动手动脑总结
    Java实验一——习题册+登陆界面 总结
  • 原文地址:https://www.cnblogs.com/dianel/p/10073718.html
Copyright © 2011-2022 走看看