• python路径操作


    路径操作模块

    3.4版本之前

    os.path模块

    from os import path
    
    p = path.join("/xpc","sysconfig","network")#构建一个目录,它和存在不存在是两回事。
    print(type(p),p)
    print(path.exists(p))
    print(path.split(p))#(head,tail)
    print(path.abspath("."))#绝对路径,点代表当前路径
    p = path.join("f:/",p,"test.txt")
    print(path.dirname(p))
    print(path.basename(p))
    print(path.splitdrive(p))
    
    p1 = path.abspath(__file__)
    print(p1,path.basename(p1))
    while p1!=path.dirname(p1):
        p1=path.dirname(p1)
        print(p1,path.basename(p1))
    
    结果为:
    <class 'str'> /xpcsysconfig
    etwork
    False
    ('/xpc\sysconfig', 'network')
    C:UsersAdministratorPycharmProjectsstudytsetxpc1
    f:/xpcsysconfig
    etwork
    test.txt
    ('f:', '/xpc\sysconfig\network\test.txt')
    C:UsersAdministratorPycharmProjectsstudytsetxpc1	est2.py test2.py
    C:UsersAdministratorPycharmProjectsstudytsetxpc1 xpc1
    C:UsersAdministratorPycharmProjectsstudytset studytset
    C:UsersAdministratorPycharmProjects PycharmProjects
    C:UsersAdministrator Administrator
    C:Users Users
    C: 

    3.4版本开始

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

    pathlib模块

    from pathlib import Path(首字母大写

    目录操作

    初始化

    from pathlib import Path
    
    p = Path()#当前目录
    print(p)
    p = Path("a","b","c/d")#当前目录下的a/b/c/d
    print(p)
    p = Path("/xpc")#跟下的xpc目录
    print(p)
    
    结果为:
    .
    acd
    xpc
    from pathlib import Path
    
    p = Path()#当前目录
    print(p,type(p))#window和Linux不一样
    print(p.absolute())#绝对路径
    
    print(p.joinpath("a","b"))#a/b,它创建了一个新的,所以要用需要创建一个新的对象接着
    
    p = Path("a","b","c/d")#当前目录下的a/b/c/d
    print(p,p.absolute())
    p=p/"e"/"f"#不带p会出错。需要带个对象。
    print(p)
    p/="g"
    print(p)
    p = Path("/xpc")#跟下的xpc目录
    print(p,p.absolute())
    
    
    结果为:
    . <class 'pathlib.WindowsPath'>
    C:UsersAdministratorPycharmProjectsstudytsetxpc1
    a
    acd C:UsersAdministratorPycharmProjectsstudytsetxpc1acd
    acdef
    acdefg
    xpc C:xpc

    路径拼接和分解

    操作符/

    path对象/path对象

    path对象/字符串 或者 字符串/path对象

    分解

    parts属性,可以返回路径中的每一个部分

    joinpath

    joinpath(*other)连接对个字符串到Path对象中。

    from pathlib import Path
    
    p = Path()#当前目录
    p = p/"a"
    p1 = "b"/p
    p2 = Path("c")
    p3 = p2/p1
    print(p3.parts)
    p4 = p3.joinpath("etc","init.d",Path("httpd"))
    print(p4)
    
    结果为:
    ('c', 'b', 'a')
    caetcinit.dhttpd

    获取路径

    str获取路径字符串

    bytes获取路径字符串的bytes

    from pathlib import Path
    
    p = Path("/xpc")
    print(str(p),bytes(p))
    
    结果为:
    xpc b'\xpc'

    父目录

    parent目录的逻辑父目录

    parents父目录序列,索引0是直接的父。

    from pathlib import Path
    
    p = Path("/a/b/c/d")
    print(p.parent)
    print(p.parent.parent)
    for x in p.parents:
        print(x)
    
    结果为:
    ac
    a
    ac
    a
    a
    
    from pathlib import Path
    
    p = Path("/a/b/c/d")
    print(p.parent.parent)
    for x in p.parents:#可迭代对象
        print(x)
    
    结果为:
    a
    ac
    a
    a
    

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

    name目录的最后一个部分

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

    stem 目录最后一个部分,没有后缀。

    suffixes返回多个扩展名列表

    with_suffix(suffix)补充扩展名到路径尾部,返回新的路径,扩展名存在则无效。

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

    from pathlib import Path
    
    p = Path("/xpc/mysqlubstkk/mysql.tar.gz")
    print(p.name)
    print(p.suffix)
    print(p.suffixes)
    print(p.stem)
    print(p.with_name("mysql-5.tgz"))
    p = Path("README")
    print(p.with_suffix(".txt"))
    
    结果为:
    mysql.tar.gz
    .gz
    ['.tar', '.gz']
    mysql.tar
    xpcmysqlubstkkmysql-5.tgz
    README.txt
    from pathlib import Path
    
    p = Path("/xpc/mysqlubstkk/mysql.tar.gz")
    print(p.name)
    print(p.suffix)
    print(p.suffixes)
    print(p.stem)
    print(p.with_name("mysql-5.tgz"))
    p = Path("README")
    print(p.with_suffix(".txt"))#变成了新路径
    
    结果为:
    mysql.tar.gz
    .gz
    ['.tar', '.gz']
    mysql.tar
    xpcmysqlubstkkmysql-5.tgz
    README.txt

    cwd()返回当前工作目录

    home()返回当前家目录

    is_dir()是否是目录,目录存在返回True。

    is_file()是否是普通文件,文件存在返回True。

    is_symlink()是否是软链接

    is_socket()是否是socket文件。

    is_block_device()是否是块设备

    is_char_device()是否是字符设备

    is_abslolute()是否是绝对路径

    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时,路径存在,抛出FileExitsError;True时,FileExistError被忽略。

    iterdir()迭代当前目录,返回一个生成器对象。

    from pathlib import Path
    
    p = Path()
    p /="a/b/c/d"
    print(p.exists())
    
    #创建目录
    #p.mkdir()#FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'a\b\c\d'
    p.mkdir(parents=True)
    print(p.exists())
    p.mkdir(parents=True)
    p.mkdir(parents=True,exist_ok=True)
    P /= "readme.txt"
    p.parent.rmdir()
    p.parent.exists()
    p.mkdir()
    p.mkdir(parents=True)
    
    #遍历,并判断文件类型,如果是目录是否可以判断其是否为空?
    for x in p.parents[len(p.parents)-1].iterdir():
        print(x,end="	")
        if x.is_dir():
            flag = False
            for _ in x.iterdir():
                flag = True
                break
            #for循环是否可以使用else子句
            print("dir","not empty" if flag else "empty",sep="	")
        elif x.is_file():
            print("file")
        else:
            print("other file")

    通配符

    glob(pattern)通配给定的模式,返回一个生成器。

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

    返回一个生成器。

    from pathlib import Path
    
    p = Path()
    print(p)
    print(p.cwd())#当前工作目录
    print(p.home())
    print(p.is_dir())#是否是目录
    print(p.is_file())
    print(p.is_absolute())
    print(p.absolute())
    print(p.resolve())#要求对应的路径要存在
    print(p.exists())
    print(list(Path().glob("t*")))
    print(list(Path().glob("*.py")))
    print(list(Path().glob("**/*..py")))#相对当前路径,里面所有的。py文件。和rglob等价、
    print(Path("a/b.py").match("*.py"))
    print(Path("a/b/c.py").match("*.py"))
    
    结果为:
    .
    F:project
    C:Usersxpc
    True
    False
    False
    F:project
    F:project
    True
    [WindowsPath('test.py'), WindowsPath('test1.py')]
    [WindowsPath('test.py'), WindowsPath('test1.py'), WindowsPath('xyz.py')]
    []
    True
    True

    匹配

    match(pattern)

    模式匹配

    from pathlib import Path
    
    print(Path("a/b.py").match("*.py"))
    print(Path("a/b/c.py").match("b/*.py"))
    print(Path("a/b/c.py").match("a/*.py"))
    print(Path("a/b/c.py").match("a/*/*.py"))
    print(Path("a/b/c.py").match("a/**/*.py"))
    print(Path("a/b/c.py").match("**/*.py"))
    
    结果为:
    True
    True
    False
    True
    True
    True

    start()相当于start命令。

    lstat()同stat(),但如果是符号链接,则显示符号链接本身的文件信息。

    from pathlib import Path
    
    p = Path("test.py")
    print(p.stat())
    #p1 = Path("t")
    #p1.stat()
    print(p.lstat())
    
    结果为:
    os.stat_result(st_mode=33206, st_ino=844424930132020, st_dev=870516, st_nlink=1, st_uid=0, st_gid=0, st_size=111, st_atime=1575817742, st_mtime=1576161010, st_ctime=1575817742)
    os.stat_result(st_mode=33206, st_ino=844424930132020, st_dev=870516, st_nlink=1, st_uid=0, st_gid=0, st_size=111, st_atime=1575817742, st_mtime=1576161010, st_ctime=1575817742)

    文件操作

     以“wt”方式写入字符串大路径对应文件。

    上面的方法使用应该注意,建议使用内建open方法。

    from pathlib import Path
    
    p = Path("my_binary_file")
    p.write_bytes(b"binary file conents")
    print(p.read_bytes())
    
    P = Path("my_test_file")
    p.write_text("xpc")
    print(p.read_text())
    
    p = Path("f:/test.py")
    p.write_text("hello python")
    print(p.read_text())
    with p.open() as f:
        print(f.read(5))
    
    结果为:
    b'binary file conents'
    xpc
    hello python
    hello
     
     
  • 相关阅读:
    Linux中hadoop配置hdfs
    linux安装配置hadoop
    Linux配置Tomcat
    虚拟机jdk(在profile.d中)配置
    SSH免密登录
    Linux配置MySQL
    虚拟机jdk(profile)配置
    解释器模式实例分析
    第七天
    第六天
  • 原文地址:https://www.cnblogs.com/xpc51/p/12030534.html
Copyright © 2020-2023  润新知