zoukankan      html  css  js  c++  java
  • python文件路径处理 --- os.path

    路径字符串

    磁盘将数据写入各个扇区中,使数据分散在各个未使用的块上来储存数据。并用一套文件系统对数据进行管理,微观上,文件系统使用INode结构体来记录这些块区的地址以及数据的先后顺序,实现对这些乱序储存的数据管理。宏观上,为了方便用户的管理,使用路径字符串的方式来“描述”文件的位置,但这只是一种逻辑位置,并不存在此种数据上的层级关系,一个文件字符串在将会映射到一个的INode结构体中,再使用iNode结构体实现对数据的操作。

    当对数据进行拷贝,跨分区的移动等涉及磁盘块上数据移动操作时,将需要进行文件IO操作,此时为了定位数据位置,宏观上,用户使用路径字符串的方式去寻找这些数据。此时,对文件的操作被封装成了对一个个路径字符串的操作。

    os模块的路径操作

    当前工作目录

    默认为当前文件所处的目录,是工作目录路径,而不是这个文件的路径,文件路径为__file__

    # 获取当前的工作目录
    os.getcwd()
    os.path.dirname(__file__)

    更改当前的工作目录

    当我们使用相对路径指定文件的时, 默认的绝对路径是 “当前工作目录” + “文件路径”,而当前工作目录默认为这个文件所处的目录。我们可以将其指定到其他的目录中去

    os.getcwd()             # 获取当前路径
    os.chdir("d:")          # 改变这个工作目录当 d: 盘下, 根盘符开始,是绝对路径
    os.chdir("config")      # 这是一个相对路径,会在当前的工作目录下找 config 目录,然后切换当这个config目录中

    增删目录

    os.mkdir(path)   # path如果绝对路径,在这个绝对路径下创建,否则在当前工作目录下创建。 
    os.makedirs(path1/path2/path3/...) 创建多级目录 
    os.rmdir(path)      # 删除目录
    os.removedirs(path1/path2...) # 删除多级目录,每级目录必须为空才可以删除。
    os.sep              # 当前操作系统所使用的路径分隔符

    walk遍历目录树

    遍历一个目录下的所有文件,可以使用walk遍历。walk使用深度遍历优先方式。

    os.walk("path")   # 依次递归遍历这个目录并返回一个生成器,每次一个三元组。
    # 每次next返回的三元组 ("正在遍历目录路径", [子目录列表],[子文件列表] )

    调用系统中的可执行文件

    使用os.system(path) 可以执行这个可执行文件,例如,打开微信客户端,打开cmd命令行等

    os.system("cmd")   # 可以打开命令行终端,并可以实现交互
    
    os.system("d:python.exe ")   # 绝对路径下使用搜寻可执行文件,存在就执行这个文件。

    几个os模块方法

    os.name()             Windows是nt,Linux是Posix
    os.uname()           *nix支持
    os.platform()        平台架构win32(swindows),linux
    os.stat(path, dir_fd=None, follow_symlinks=True)
         path = 路径或者文件描述符
         follow_symlinks = True 默认跟踪软链接,
    os.lstat() 同上,默认不跟踪软链接 
    os.chmod(path, mode, dir_fd=None, follow_symlinks=True)
    os.chown(path, uid, gid)
    os.getcwd()
    os.system()
    os.chdir()
    os.stat(".")

    os.path模块

    文件路径字符串作为一种特殊的字符串(作为文件的映射),需要根据文件的管理过程中的常用操作方式,提供一些方便的方法对这些路径字符串进行对应的操作,例如,拼接,分割,取父目录,取文件名等来实现文件的操作规则。

    os.ltsep = "/"             # 默认分割符号,不同的操作系统不同
    os.path.abspath(path)
    os.path.relpath(path, start=os.curdir)   # 从strat路径到path路径的相对路径表示方式。路径字符串游戏而已,实际路径不存在。
    --------------------------------------------
    os.path.basename(path) 
    os.path.dirname(path) 
    --------------------------------------------
    os.path.commonpath(paths)       # 返回最长的相同的父路径
    os.path.commonprefix(list)      # 从左到右最长的相同字符串
    >>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
    '/usr/l'
    # 共同的前缀,以字符串的方式进行计算。相同的字符均可。
    >>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
    '/usr'
    # 共同的父目录字符串
    --------------------------------------------
    os.path.exists(path) 
    # 判断这个路径是否在当前文件系统中存在,此时才会真实验证路径的存在性
    # path还可以是一个数字,将作为文件描述符检测是否存在。
    # 存在返回True, 不存在返回False
    os.path.lexists(path)
    # 是否存在这个 link 软链接文件
    -------------------------------------------
    os.path.expanduser(path) 
    os.path.expandvars(path) 
    -------------------------------------------
    os.path.getatime(path)     # 返回对应文件的最新的access time,不存在或者不可访问报错
    os.path.getmtime(path)     # 返回对应文件的最新的modify time,不存在或者不可访问报错
    os.path.getctime(path)     # 返回对应文件的最新的create time,不存在或者不可访问报错
    os.path.getsize(path)      # 获取文件 字节 长度.不存在或者不可访问报错
    -------------------------------------------
    os.path.isabs(path)        # 判断是否为绝对路劲. posix 以根,windows 以磁盘盘符号
    os.path.isfile(path) 
    os.path.isdir(path) 
    os.path.islink(path) 
    ------------------------------------------
    os.path.join(path, *paths)    # 拼接字符串,POSIX和Windows默认拼接符不同
    os.path.normcase(path)        # Normalize the case of a pathname
    os.path.normpath(path)        # 将路径字符串规范统一化,Windows会调用normcase(path)
    # 一些复杂的路径如 A//B, A/B/, A/./B and A/foo/../B 变成最简路径 A/B. 
    os.path.samefile(path1, path2)
    # 判断两个路径是否指向同一个文件,根据指向同一个inode编号判断
    os.path.sameopenfile(fp1, fp2)
    # 打开的是同一个文件返回True
    os.path.samestat(stat1, stat2)
    # 指向相同的文件返回True. 
    os.path.split(path) 
    # 分割父目录和基名
    os.path.split("c:\temp\jdd\ddd\daa")
    # ('c:\temp\jdd\ddd', 'daa')
    os.path.splitext(path)
    # 分割基名后缀,
    os.path.splitext("c:\temp\jdd\ddd\daa.tar")
    # ('c:\temp\jdd\ddd\daa', '.tar')
    #只有.bashrc 返回(.bashrc, "")

     

  • 相关阅读:
    PHP 包含文件路径问题
    PHP显示今天、今月、上月、今年的起点/终点时间戳
    PHP Web基础教程
    php如何生成随机密码的几种方法
    You don't have permission to access /~whpc on this server.
    linux 网络 PING IP可以通,ping域名ping不通
    CPU : 二级缓存容量
    简单建立个人WEB网站
    MKL程序编译与连接:Lapack篇
    ldd命令原理与使用
  • 原文地址:https://www.cnblogs.com/k5210202/p/13068699.html
Copyright © 2011-2022 走看看