路径操作

路径操作模块

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)
nolannolan
上一篇 2017-10-27
下一篇 2017-10-29

相关推荐

  • 数组的基本应用

                                   数组 变量:存储单个元素的内存空间v 数组:存储多个元素的连续的内存空间,相当于多个变量的集合。v 数组名和索引 索引:编号从0…

    Linux干货 2016-08-24
  • Tomcat详解

    Tomcat详解 1、tomcat安装 tomcat的组件:<Server> <Service> <connector/> <connector/> <Engine> <Host /> <Host> <Context/> … </Host> &lt…

    2017-04-27
  • keepalived实战之小试牛刀

    keepalived是什么 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。 keepalived工作原理 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。 虚拟路由冗余协议,可以认为是实现路…

    Linux干货 2017-06-24
  • 马哥教育网络班21期+第2周课程练习

    第二周练习 1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cp、mv、rm、touch cp:copy,复制    SYNOPSIS        cp [OPTION]… [-T] SOURC…

    Linux干货 2016-07-07
  • Python入门之迭代,列表解析,生成器及文件操作

    迭代器是访问集合元素的一种方式,迭代器包含了__iter__()(返回迭代器对象本身)next()(返回迭代器的下一个元素)迭代器只能往前不会退后 以下类型支持迭代 序列类型:list,str,tuple 非序列类型:dict,file 自定义类 通过内建的函数iter()或对象自带方法__iter__可以获取迭代器对象 l1=range(5) iter1=…

    Linux干货 2015-12-13