路径操作

python的OS模块

  • path属性os模块——from os import path

常用方法

from os import path

p = path join('m','n')
p1 = path.join('e:/a/b','c')
print(type(p),p)
print(type(p1),p1)
  • os.path.exists§->True|False #判断字符串路径或文件是否存在
  • os.path.split§->(路径,基名) #切割路径字符串,获取路径和基名
  • os.path.dirname§->str路径 #获取路径字符串的路径
  • os.path.basename§->str基名 #获取路径字符串的基名
  • os.path.relpath(p )->str路径 #获取文件路径的相对路径
  • os.path.abspath§->str # 获取路径字符串的绝对路径
    • os.path.abspath("") 和 os.path.abspath(".") 表示当前路径的绝对路径
  • os.path.splitdrive§->(磁盘名,路径) #windows系统上使用,获取路径所在磁盘的盘符
    • path.splitdrive(“c:/a/b/text.py”) #(‘c:’, ‘/a/b/text.py’)
  • os.path.samefile(src,dst) #判断两个路径是否指向同一个文件
  • os.path.normpath(p )->os.path #正常化路径,取消双斜杠
  • os.path.normcase(p )->os.path #将路径大小写规范。
    • 如果是linux系统或者Mac OS系统,不做处理
    • 如果是windows系统上,将路径全部转换成小写,并将"/“转成”\\"
  • 其他相关方法可以查看python API
    • os.path.getatime(path)
    • os.path.getsize(path) #获取文件大小
    • os.path.isabs(path) #是否是绝对路径
    • os.path.isdir(path) #判断路径是否是当前路径

pathlib模块的path对象

初始化示例
from
pathlib import Path p = Path() #当前目录 Path(.) Path("")都是表示当前目录 p = Path('a','b','c/d') #当前目录下的a/b/c/d p = Path("/etc") #表示跟下的etc目录
  • Path(*pathsegments)->PosixPath|WindowsPath 根据路径创建Path对象
  1. pathsegments 路径字符串
  2. PosixPath 在linux下调用会返回PosixPath对象
  3. WindowsPath 在windows下调用会返回WindowsPath对象

path对象拼接


str / path ==>path

path / path ==>path

path / str ==>path

str / str ==>报错

python中的全局方法

  • cwd()->Path #获取当前工作路径
  • from pathlib import Path
    p = Path("d:/a/b")
    print(Path.cwd(),p.cwd()) 

     

python中的判断方法

  • exists() #目录或文件是否存在
  • is_dir() #是否是目录,目录存在返回True
  • is_file() #是否是普通文件,文件存在返回True。
  • is_fifo() #是否是FiFO文件,如果文件路径是链接文件,链接文件指向FIFO文件,并未断开,则为True,否则为False
  • is_symlink() #是否是软连接
  • is_block_device() #是否是块设备
  • is_char_device() #是否是字符设备
  • is_absolute() #是否是绝对路径

绝对路径path

  • resolve() #返回一个新的路径,这个路径就是当前Path对象的绝对路径,如果是软连接则直接被解析。注意无法识别windows的快捷方式。
  • absolute() #获取绝对路径,也无法识别windows的快捷方式

文件操作(Path)

chmod(mode) #根改路径指向文件的权限,类似于os.chmod()

  • mode int类型,可以使用8进制描述。例如0o775
  • 注意,如果指向的是符号链接文件,这会跟进符号链接文件所指向的文件
  • lchmod(mode) #针对符号链接文件,只改变符号链接文件的权限,而不是跟进符号链接所指向的文件。
  • touch(mode=0o666,exit_ok=True) #创建文件
    • mode #模式,默认值为0o666 表示创建文件。
    • exit_ok #是否忽略文件存在异常。默认值为True
      • True #如果创建的文件已经存在,就只修改文件的时间戳。不抛出异常
      • False #如果文件已经存在,抛出FileExistsError异常
  • unlink() #删除文件或符号链接,如果Path指向一个目录会调用Path.rmdir()
  • rmdir() #删除空目录,非空目录会报错。注意,Path对象没有提供判断目录为空的方法
  • 简单示例,判断目录为空的方法
    from pathlib import Path
    def isNoneDir(dirname:Path):
        try:
            stat = dirname.lstat()
        except Exception:
            return Exception
        else:
            if dirname.is_dir():
                for i in dirname.iterdir():
                    break
                else:
                    return True
            return False
    p = Path("")
    for i in p.iterdir():
        print(i.name,"\t\t空目录" if isNoneDir(i) else "")

目录结构(path)

iterdir() #迭代当前目录,不递归。

  • 简单示例 --输出当前路径下哪些是文件,哪些是目录
  • from pathlib import Path
    arrdir = {*Path("").iterdir()} #获取当前目录下的所有文件
    mdir = {i for i in filter(lambda p: p.is_dir() ,arrdir)} #取出为目录的Path对象
    text = arrdir - mdir   #取出非目录Path对象
    print("目录:",[*map(lambda x:x.name,mdir)])
    print("文件:",[*map(lambda x:x.name,text)])

     

 

posted @ 2020-05-20 19:27  F_jj  阅读(253)  评论(0编辑  收藏  举报