• Python学习week7-文件路径操作


    1、os.path模块

    # os.path常用方法

    from os import path
    p=path.join('/etc','sysconfig','network')  # 路径拼接
    print(type(p),p)
    print(path.exists(p)) # 判断路径是否存在
    
    print(path.split(p)) #  将路径切割为2部分,head,tail
    
    print(path.abspath('.')) # 当前路径的绝对路径
    
    p=path.join('o:/',p,'test.txt')
    print(p)  # o:/etcsysconfig
    etwork	est.txt
    print(path.dirname(p)) # o:/etcsysconfig
    etwork
    print(path.basename(p)) # test.txt
    
    p1=path.abspath(__file__)
    while p1 != path.dirname(p1):
        p1=path.dirname(p1)
        print(p1,path.basename(p1))
        
    '''
    运行结果:
    F:study-pythoncom.lx.studyweek7 week7
    F:study-pythoncom.lx.study com.lx.study
    F:study-python study-python
    F: 
    '''

    2、pathlib模块

    # python3.4版本引入pathlib模块,提供Path对象来操作,包括目录和文件;

    # 模块导入: from pathlib import Path

    2.1、目录操作

    2.1.1、初始化

    # 初始化操作:

    p=Path() # 创建当前目录对象 ==> “.”
    
    p=Path('a','b','c/d') # 当前目录下的a/b/c/d 对象 ==> a/b/c/d
    
    p=Path('/etc') # 根下/etc目录对象 ==> /ect

    2.1.2、路径的拼接与分解

    (1) 拼接操作符:/

      # 操作方法:

        Path对象 / Path对象;

        Path对象 / 字符串  或者  字符串/Path对象;

      # 拼接出来的一定是一个Path对象

    (2)分解

      # Path对象的parts属性,以元祖的形式返回Path对象中的每一个部分;

    p=Path('/etc') # 根下/etc目录对象
    
    p=p / 'a' /'c'  # Path 对象拼接
    
    print(p) # ==> etcac
    
    print(p.parts) # ('\', 'etc', 'a', 'c')

    (3)joinpath

      # joinpath(*other) 连接多个字符串到Path对象中,返回一个新的路径对象

    p = Path()
    print((p/'a').absolute()) # F:study-pythoncom.lx.studyweek7a
    
    p1=p/'a'
    print(p1.absolute())
    
    p = p / 'a'  # a
    print(0,p.absolute())
    print(1,p)
    p1 = 'b' / p # b/a
    print(2,p1)
    p2 = Path('c') # c
    print(3,p2)
    p3= p2 /p1 # c / b /a
    print(4,p3)
    
    print(p3.parts)
    pt=p3.joinpath('etc','init.d',Path('httpd'))
    
    print(5,p3) # p3 ==> ca
    print(6,pt) # pt ==> caetcinit.dhttpd

    2.1.3、获取路径

    # str方法可以将Path对象转换为字符串对象,bytes获取路径字符串的bytes;

    p=Path('/etc')
    print(str(p)) # etc
    print(bytes(p)) #  b'\etc'

    2.1.4、父目录

    # p.parent:表示p对象的父目录,p.parents:为整个目录对象的存储元祖

    p=Path('a/b/c/d')
    
    print(p.parent) # ==> ac
    print(p.parent.parent) # ==> a
    
    print(p.parts) # 父目录元祖 ('a', 'b', 'c', 'd')
    
    for x in p.parts:
        print(x)
    '''
    a
    b
    c
    d
    '''

    2.1.5、目录组成部分

    # 目录的组成:name、stem、suffix、suffixes、with_suffix(suffix)、with_name(name)

    ①:name 目录的最后一部分;

    ②:suffix 目录中最后一个部分的扩展名;

    ③:stem 目录最后一个部分,没有后缀;

    ④:suffixes 返回对个扩展名列表;

    ⑤:with_suffix(suffix) 有扩展名则替换,无则补充扩展名;

    ⑥:with_name(name) 替换目录最后一部分并返回一个新的路径;

    p=Path('/etc/mysqlinstall/mysql.tar.gz')
    
    print(p.name) # ==>mysql.tar.gz
    print(p.suffix) # ==> .gz
    print(p.suffixes) # ==> '.tar', '.gz']
    print(p.stem) # mysql.tar
    
    print(p.with_name('mysql-5.tgz')) # ==> etcmysqlinstallmysql-5.tgz
    
    print(p.with_suffix('.png')) # ==> etcmysqlinstallmysql.tar.png
    
    p=Path('README.py') # ==> README.py
    print(p.with_suffix('.txt')) # ==> README.txt

    2.1.6、其他用法

    '''
    全局方法:
    cwd()  返回当前工作目录
    home() 返回当前家目录
    
    判断方法:
    is_dir() 判断是否为目录
    is_file() 判断是否为文件
    is_symlink() 判断是否为软链接
    is_socket() # 判断是否为socket连接
    is_block_device() # 是否为块设备
    is_char_device()  # 是否为字符设备
    is_absolute() # 是否为绝对路径
    resolve()  # 返回一个新路径,这个路径就是挡墙Path对象的绝对路径,如果是软链接则直接解析;
    absolute() # 获取绝对路径
    exists() # 目录或文件是否存在
    rmdir() # 删除空目录,没有提供判断是否为空目录的方法;
    touch(mode=0o666,exist_ok=True) # 创建一个文件
    as_uri() 将路径返回成URI,例如:file:///etc/passwd
    p=Path('a.txt')
    url=p.absolute().as_uri()
    print(url)
    ==> file:///F:/study-python/com.lx.study/week7/a.txt
    mkdir(mode=0o777,parents=False,exist_ok=False) # parents,是否创建父目录,True等同于mkdir -p; False时,父目录不存在,则抛出FileNotFountError # exist_ok参数,False时,路径已经存在则抛出FileExistsError;True则异常被忽略; ''' p=Path('a.txt') p.touch() p1=Path('a/b/c') print(p1.absolute()) p1.mkdir(mode=0o777,parents=True,exist_ok=False) # ==> 在当前目录下创建了a/b/c目录

    # iterdir() 迭代当前目录:

    p=Path(r'F:study-pythoncom.lx.studyweek7')
    
    list=[i for i in p.iterdir()]
    
    for i in list:
        print(i)
    
    '''
    F:study-pythoncom.lx.studyweek7a
    F:study-pythoncom.lx.studyweek7a.txt
    F:study-pythoncom.lx.studyweek7	7file.py
    '''

    # 通配符

      glob(pattern)  通配给定的模式;

      rglob(pattern) 通配给定的模式,递归目录;

    print(list(p.glob('*.py'))) # 返回当前目录对象下以py结尾的文件
    '''
    ==>[WindowsPath('F:/study-python/com.lx.study/week7/t7file.py')]
    '''
    
    g=p.rglob('*.txt') # 递归查找txt结尾的文件的生成器对象
    
    for i in g:
        print(i)
    
    '''
    F:study-pythoncom.lx.studyweek7a.txt
    F:study-pythoncom.lx.studyweek7acd
    eadme.txt

    # 匹配 match(pattern)

    模式匹配,成功返回True

    # stat() 相当于linuxstat命令;

    2.2、文件操作

    # open(self, mode='r', buffering=-1, encoding=None,errors=None, newline=None):

    使用方法类似内建函数open,返回一个文件对象:

    p=Path(r'F:study-pythoncom.lx.studyweek7a.txt')
    
    print(p.match('*.txt'))
    
    with p.open(encoding='utf-8') as f:
        print(f.readline())

    # read_bytes() 以rb模式读取文件,并返回bytes类型

    # Path.write_bytes(data) 以wb模式写入数据到文件

    # read_text(encoding=None,errors=None) 以rt模式读取文件,返回文本;

    # write_text(data,encoding=None,errors=None) 以wt模式写入字符串到文件;

  • 相关阅读:
    权限设计 【数据库和代码】 GO
    sql读取指定字符前的字符 GO
    C#编码建议 GO
    网页鼠标提示 GO
    ASP.NET设置ie打印两法 GO
    正则表达式入门教程 GO
    一个初学者对ArrayAdapter的简单理解
    泛型的简单理解
    SQL Server死锁详解
    .NET代理模式
  • 原文地址:https://www.cnblogs.com/soulgou123/p/9818779.html
Copyright © 2020-2023  润新知