路径操作

路径操作模块

3.4版本之前

  • os.path模块
    from os import path
    
    p = path.join('/etc', 'sysconfig', 'network')
    print(type(p), p)
    print(path.exists(p))
    print(path.split(p))
    print(path.abspath('.'))
    
    p = path.join('d:/', p, 'test.txt')
    path.dirname(p)
    path.basename(p)
    path.splitdrive(p)
    

    59f062dedc3a236e99000002


3.4版本之后

建议使用pathlib模块,提供Path对象来操作。包括目录和文件


pathlib模块

  • from pathlib import Path

目录操作

初始化

p = Path()
p = Path('a', 'b', 'c/d')

59f073e3dc3a236e99000004


路径拼接和分解

  • 操作符
    Path对象 / Path对象
    Path对象 / 字符串 或者 字符串 / Path对象
    
  • 分解
    • parts属性,可以返回路径中的每一个部分
    • joinpath(*other)
    • 连接多个字符串到Path对象中joinpath

    59f074c3dc3a236e99000005


获取路径

  • str   获取路径字符串
  • bytes   获取路径字符串的bytes

    59f0754cdc3a236e99000006


父目录

  • parent   目录的逻辑父目录
  • parents   父目录序列,索引父,其他是爷爷辈

    59f07618dc3a236e99000007


name、stem、suffix、suffixes、with_suffix(suffix)、with_name(name)

  • name   目录的最后一个部分
  • suffix   目录中最后一个部分的扩展名(后缀)
  • stem   目录最后一个部分,没有后缀
  • suffixes   返回多个扩展名列表
  • with_suffix(suffix)   补充扩展名到路径尾部,返回新的路径,扩展名存在则无效
    • p.with_suffix(‘.txt’),txt前必须有点,否则会报错
  • with_name(name)   替换目录最后一个部分,并返回一个新的路径

    59f079a7dc3a236e99000008


其他操作

  • cwd()
    • 返回当前工作目录
  • home()
    • 返回当前家目录
  • is_dir()
    • 是否是目录
  • is_file()
    • 是否是文件
  • is_symlink()
    • 是否是软链接
  • is_socket()
    • 是否是socket文件
  • is_block_device()
    • 是否是块设备
  • is_char_device()
    • 是否是字符设备
  • is_absolute()
    • 是否是绝对路径
  • resolve()
    • 返回一个新的路径,这个新路径就是当前Path对象的绝对路径,如果是软链接则直接被解析
  • absolute()
    • 也获取绝对路径,但是推荐使用resolve()
  • exists()
    • 目录或文件是否存在
  • rmdir()
    • 删除空目录,几乎不用
  • touch(mode=0o666, exist_ok=True)
    • 创建一个文件
  • as_uri()
    • 将路径返回成URI,例如'file:///etc/passwd'
  • mkdir(mode=0o777, parents=False, exist_ok=False)
    • parents,是否创建父目录
      • True,等同于mkdir -p
      • False,父目录不存在,则抛出FileNotFoundError
    • exist_ok
      • 在3.5版本加入
      • False,路径存在,抛出FileExistsError
      • True,FileExistsError被忽略
    • 迭代当前目录iterdir()

    59f07fe1dc3a236e99000009

    • p /= 'a/b/c/d'等价于p = p / 'a/b/c/d'

    59f07ff8dc3a236e9900000a

    59f080eddc3a236e9900000b

    • 遍历,并判断文件类型,如果是目录,判断其是否为空
      for x in p.parents[len(p.parents)-1].iterdir():
          print(x,end='\t')
          if x.is_dir():
              flag = False
              for _ in x.iterdir():
                  flag = True
                  break
              print('dir','Not Empty' if flag else 'Empty',sep='\t')
          elif x.is_file():
              print('file')
          else:
              print('other file')
      

      59f084e5dc3a236e9900000c


通配符

  • glob(pattern)   通配给定的模式
  • rglob(pattern)   通配给定的模式,递归目录
    p = Path('d:/test')p.glob('p*')    # 生成器list(p.glob('p*'))  # 返回当前目录对象下的p开头的文件list(p.glob('*/p*'))  # 返回当前目录的下一级目录对象下的p开头的文件list(p.glob('**/p*'))# 递归所有目录,等同rgloblist(p.rglob('*p'))

    59f13db8c67d161fb6000000

    • 返回当前目录的下一级目录对象下的p开头的文件
      59f13fcbc67d161fb6000001

匹配

  • match(pattern)
  • 模式匹配,成功返回True
    59f141aac67d161fb6000002

文件操作

  • Path.open(self, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None)
    • 使用方法类似内建函数open,返回一个文件对象
    • read_bytes()
      • rb读取路径对应文件,返回二进制流
    • read_text(encoding=None, errors=None)
      • rb读取路径对应文件,返回二进制流
    • Path.write_bytes(data)
      • wb方式写入数据到路径对应文件
    • write_text(data, encoding=None, errors=None)
      • wb方式写入数据到路径对应文件
    • 上面的可以看源码理解,有时候比看帮助文件简单3.5新增加的函数

    59f1452ac67d161fb6000003

    from pathlib import Path
    
    p = Path('d:/test.py')
    p.write_text('hello everyone')
    print(p.read_text())
    with p.open() as f:
        print(f.read(5))
    

    59f1462ec67d161fb6000004

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88093

(0)
上一篇 2017-10-27 09:45
下一篇 2017-10-29 11:20

相关推荐

  • bash编程初体验(一)

    bash编程初体验(一) 认识bash编程 变量与赋值 算术与逻辑运算 条件测试与退出状态 认识bash编程 Bash(GNU Bourne-Again Shell)是许多Linux发行版的默认Shell,我们要认识的bash中,就是在bash的环境下的一种编程。 众所周知,程序=指令+数据,由此也决定了两种不同的编程风格,过程过与对象式; 过程式:以指令为…

    Linux干货 2016-08-15
  • DHCP服务介绍及搭建

    DHCP服务介绍及搭建

    2018-01-16
  • 常见的文本处理工具及正则表达式的相关知识

    1.cat命令使用详解 cat [option]… [file]… -A equivalent=vET -b 非空行编号 -E 行为显示$ -n 显示所有行的行号 -s 行号并压缩连续空行为一行 -T 显示tab为^M 实例:显示a文件的行号及所有控制符 2.(1)head使用详解 head -n x 显示前x行 head -c x …

    Linux干货 2016-08-07
  • ​文件系统层级结构标准

    多数Linux发行版遵从FHS标准并且声明其自身政策以维护FHS的要求。 [1] [2] [3] [4] 然而,包括由自由标准小组成员在内开发的绝大多数发行版(截至2009年),并不完全执行建议的标准。
    当FHS创建之时,其他的UNIX和类Unix操作系统已经有了自己的标准,尤其是hier(7)文件系统布局描述。 自从第七版Unix(于1979年)发布以来已经存在,或是SunOS filesystem(7), [5] 和之后的Solaris filesystem(5)。 例如,Mac OS X使用如 /Library、 /Applications和/Users 等长名与传统UNIX目录层次保持一致。
    现在的Linux发行版包含一个/sys目录作为虚拟文件系统(sysfs,类似于 /proc,一个procfs),它存储且允许修改连接到系统的设备,然而许多传统UNIX和类Unix操作系统使用/sys作为内核代码树的符号链接。
    一些Linux系统如GoboLinux和Syllable Server使用了和FHS完全不同的文件系统层次组织方法。

    Linux干货 2016-10-17
  • N21沉舟11周作业

    1、请描述一次完整的http请求处理过程; (1) 建立或处理连接:接收请求或拒绝请求 (2) 接收请求: (3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息 (4) 访问资源:获取请求报文中请求的资源 (5) 构建响应报文 (6) 发送响应报文 (7) 记录日志 …

    Linux干货 2016-09-26