路径操作

路径操作模块

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

相关推荐

  • 编译安装http

    下载源码并解包   2 准备编译环境yum groupinstall “Development Tools” 3 编译安装   ./configure –prefix=/app/httpd24 –sysconfdir=/etc/httpd24/ –enable-ssl &#821…

    2017-12-02
  • N21天天第十一周课程练习

    1、详细描述一次加密通讯的过程,结合图示最佳。 SSL协议基础: SSL协议位于TCP/IP协议与各种应用层协议之间,本身又分为两层: 1)SSL记录协议:建立在可靠传输层协议(TCP)之上,为上层协议提供数据封装、压缩、加密等基本功能。 2)SSL握手协议:在SSL记录协议之上,用于实际数据传输前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。 SS…

    Linux干货 2016-10-09
  • 运维工程师技能需求排行

    这是我今天在拉勾网搜索运维,翻完了4四页也招聘信息之后得到的,我的目的是想要看看之后的学习,哪个更应该成为重点,有些在我意料之中,有些还真的没想到,算是努力了一个小时的收获吧,分享给大家。
    注意:其中的看法仅代表个人观点,很多都是依靠我自己的学习经验和工作经验累积的

    Linux干货 2017-12-12
  • MySQL存储过程中IN、OUT、INOUT参数使用

    MySQL存储过程中IN、OUT、INOUT参数使用 MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN、OUT、INOUT形式如:CREATE PROCEDURE([IN|OUT|INOUT] 参数名 数据类型,…) IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值。| 意思…

    Linux干货 2017-05-08
  • 正则表达式简述

    正则表达式简述 什么是正则表达式: 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 正则表达式分类: 标准正…

    Linux干货 2016-04-05
  • grep的基本用法详解

     grep是linux上常用的一个文本处理工具之一。它有着强大的文本处理能力,学会它,可以让工作更有效率。 一、初识grep   grep: Global search Regular Experssion and Print out line   从名字上也可以直观的了解到它是基于正则表达式进行全局搜索,并把结果打印到屏幕上来…

    系统运维 2015-05-25