路径操作

路径操作模块

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 09:45
下一篇 2017-10-29 11:20

相关推荐

  • 推荐-Linux Namespace的一点理解

        下文的原文来自: http://blog.csdn.net/preterhuman_peak/article/details/40857117    原文写的非常好,下文中大部分文字描述来自原文,我仅做了一点理解性的插图和实验部分。    &…

    Linux干货 2016-03-28
  • 第一天上课

                      2016.10.11 第一天上课 上课环境安排 电脑IP安排 学生IP地址安排     上课软件安装    虚拟机安装 操作系统发展史    第一代计算机:电子管计算机&nb…

    Linux干货 2016-10-18
  • 22期第十三周课堂练习

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;   3)添加s…

    Linux干货 2017-01-09
  • N29 第一周作业

    1、描述计算机的组成及其功能。
    2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。
    4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。
    6、请罗列Linux发行版的基础目录名称命名法则及功用规定

    Linux干货 2018-03-05
  • 分区块基本知识点及侧重点 — 上

        我们需要熟练了解磁盘分区原理。元数据及块设备对应inode是最重要也是最基本的原理。后面分区很多地方都和inode有关系。    一个磁盘片有63扇区,1024存储位,256个磁头,每个扇区只有前512字节是有效存储单元。所以后面磁盘清零都是跟512这个数字有关。    数据分数据区和元数据…

    Linux干货 2016-08-24
  • 聊聊CentOS6的启动过程

    前言:     作为一个合格的运维人员,系统的启动过程我们需要牢记在心,此文不深入探讨,只求大致理解CentOS6的启动过程。 一张图带你了解CentOS6的启动过程 注意:图片放大查看效果更佳 上图各阶段详解 POST:计算机开机时BIOS对其各硬件的简单测试,测试各硬件的完整性 BootSqunce:加电自检后根据…

    Linux干货 2016-03-14