• Python基础-18目录与文件


    18.目录与文件

    18.1 os和shutil

        日常使用过程中,难免需要使用跟文件系统相关的标准库。在使用Python文件系统中,常用的库为osshutil标准库,方法如下所示:

    import os
    import shutil
    

    18.1.1 遍历文件夹

    os.getcwd():获取当前工作目录,返回为字符串形式,类似于Linux中的命令pwd

    os.listdir(path):获取指定路径中的文件及文件夹,返回为列表形式,类似于Linux中的命令ls

    os.walk(path):以递归形式遍历指定路径中的文件及文件夹,返回形式为生成器,类似于Linux中的命令ls -R,示例代码如下所示:

    import os
    
    curPath=os.getcwd()
    # 使用列表推导返回当前目录中所有的文件
    fileList=[ os.path.join(dirPath,fileName) for dirPath,dirName,fileNames in os.walk(curPath) for fileName in fileNames if os.path.isfile(os.path.join(dirPath,fileName))]
    

    18.1.2 改变路径

    os.chdir("绝对/相对路径"):切换到其他目录,类似于Linux中的命令cd

    os.path.join():合成完整的路径

    如果在需要合成完整路径,则推荐使用此方法,在Windows中路径分隔符为  ,在Linux中路径分隔符为 /
    

    os.path.expanduser(path):把path中对用户相关的特殊字符转换为用户目录,在Linux中,使用~表示用户家目录,如果在Linux进行切换用户家目录,则可以使用该方法,示例代码如下所示:

    >>> os.path.expanduser(os.path.join("~","Python"))
    'C:\Users\Surpass\Python'
    

    18.1.3 创建文件夹

    os.mkdir(path,[mode]):创建文件夹,类似于Linux中的命令mkdir

    使用该方法时,要求上一级目录必须存在。
    

    os.makedirs(path,[mode,exist_ok]):递归创建文件夹,类似于Linux中的命令mkdir -p

    使用该方法时,上一级目录可以不用存在,但如果存在,想要覆盖则必须使用参数exist_ok=True
    

    18.1.4 覆盖/复制/移动文件或文件夹

    shutil.copyfileobj(src,dst,length):使用文件1的内容覆盖文件2的内容,类似于Linux中的命令cp,示例代码如下所示:

    import os
    import shutil
    
    curPath=os.getcwd()
    file1=open(os.path.join(curPath,"1.txt"),"r",encoding="utf8")
    file2=open(os.path.join(curPath,"2.txt"),"w",encoding="utf8")
    shutil.copyfileobj(file1,file2)
    

    shutil.copyfile(src,dst):复制文件并进行重命名,类似于Linux中的命令cp
    shutil.copy(src,dst):功能同上,示例代码如下所示:

    import os
    import shutil
    
    curPath=os.getcwd()
    filePath1=os.path.join(curPath,"1.txt")
    filePath2=os.path.join(curPath,"2.txt")
    shutil.copyfile(filePath1,filePath2)
    

    shutil.copy2(srcFile,dstDir):复制到文件到目录,示例代码如下所示:

    import os
    import shutil
    
    curPath=os.getcwd()
    srcPath=os.path.join(curPath,"mvdir.zip")
    dstPath=os.path.join(curPath,"mvdir")
    shutil.copy2(srcPath,dstPath)
    

    shutil.copytree(srcPath,dstPath,ignore=shutil.ignore_patterns("*.py")):递归复制目录到另一个目录中,类似于Linux中的命令cp -r,需要注意的是 目的目录必须不存在,示例代码如下所示:

    import os
    import shutil
    
    srcPath=os.getcwd()
    dstPath=os.path.join(srcPath,"copydir")
    # 复制目录,并忽略扩展名为py的文件
    shutil.copytree(srcPath,dstPath,ignore=shutil.ignore_patterns("*.py"))
    

    shutil.rmtree(dst,ignore_errors=True):递归删除目录下的所有文件及文件夹,含目录本身,类似于Linux中的命令rm -rf,示例代码如下所示:

    import os
    import shutil
    
    srcPath=os.getcwd()
    dstPath=os.path.join(srcPath,"copydir")
    shutil.rmtree(dstPath,ignore_errors=True)
    

    os.remove(path):删除文件,但不能删除文件夹,类似于Linux中的命令rm,示例代码如下所示:

    import os
    
    curPath=os.getcwd()
    srcPath=os.path.join(curPath,"mvdir.zip")
    os.remove(srcPath)
    

    shutil.move(srcPath,dstPath):递归移动文件或文件夹到另一个目录,类似于Linux中的命令mv,示例代码如下所示:

    import os
    import shutil
    
    curPath=os.getcwd()
    srcPath=os.path.join(curPath,"copy")
    dstPath=os.path.join(curPath,"mvdir")
    shutil.move(srcPath,dstPath)
    

    shutil.make_archive(fileName,format,dstDir):对目录创建压缩打包,format为zip/tar等,类似于Linux中的命令tar -cf,示例代码如下所示:

    import os
    import shutil
    
    curPath=os.getcwd()
    srcPath=os.path.join(curPath,"copy")
    dstPath=os.path.join(curPath,"mvdir")
    shutil.make_archive(dstPath,"zip",dstPath)
    

    18.1.5 文件或文件夹是否存在

    os.path.exists(path)

    18.1.6 判断是否为文件或文件夹

    os.path.isfile(path)
    os.path.isdir(path)

    18.1.7 获取文件名或路径

    os.path.basename(path):获取文件名(含扩展名)
    os.path.dirname(path):获取文件路径
    os.path.splitext(path):分离文件名和扩展名
    os.path.split(path):分离文件路径和文件名(含扩展名)

    import os
    
    tmpPath=r"C:UsersSurpassPycharmProjects1.txt"
    fileName=os.path.basename(tmpPath)
    filePath=os.path.dirname(tmpPath)
    fileExtName=os.path.splitext(tmpPath)[-1]
    path,fname=os.path.split(tmpPath)
    

    18.2 pathlib

        除os标准库之外,在Python 3.4及之后的版本,有一个更好的用的标准库pathlib,使用起来更方便简单。在使用之前需要导入该库

    import pathlib
    
    

    18.2.1 遍历文件夹

    p.cwd():返回当前工作目录,相当于os.getcwd()
    p.home():返回用户家目录,相当于Linux命令中的cd ~
    p.resolve():获取完整路径
    p.iterdir():获取目录中的文件和文件夹,相当于os.listdir()
    p.glob(".py"):获取目录中的文件和文件夹,相当于os.listdir(),可以添加筛选条件
    p.rglob("
    "):递归获取目录中的文件和文件夹,相当于os.walk(),可以添加筛选条件

    示例代码如下所示:

    from pathlib import Path
    
    tmpPath=r"C:UsersSurpassPycharmProjects"
    for item in Path(tmpPath).rglob("*"):
        temp=Path(item)
        if not temp.is_dir():
            print(item)
    

    18.2.2 改变路径

    Path(p,file/path) 相当于os.path.join()
    p.expanduser():相当于os.path.expanduser(path)

    from pathlib import Path
    tmpPath=r"C:UsersSurpassPycharmProjects"
    p=Path(tmpPath)
    p=Path(p,"aa.txt")
    
    

    18.2.3 创建文件夹

    p.mkdir(exist_ok=True):前提是上级目录必须存在,相当于os.mkdir()
    p.mkdir(exist_ok=True,parents=True):递归创建文件夹,推荐这种用法,相当于os.makedirs()

    from pathlib import Path
    
    tmpPath=r"C:UsersSurpassPycharmProjectsTest"
    p=Path(tmpPath)
    p.mkdir()
    
    tmpPath=r"C:UsersSurpassPycharmProjectsTestMakeFileAddTest"
    p=Path(tmpPath)
    p.mkdir(exist_ok=True,parents=True)
    

    18.2.4 获取文件名或路径

    from pathlib import Path
    
    tmpPath=r"C:UsersSurpassPycharmProjects1.txt"
    p=Path(tmpPath)
    p.name # 获取文件名,包含扩展名
    p.stem # 获取文件名,不包含扩展名
    p.suffix # 获取文件扩展名,返回为字符串形式
    p.suffixes # 获取文件扩展名,返回为列表形式
    p.parent # 获取文件名路径,相当于os.path.basename()
    

    18.2.5 判断是否为文件或文件夹

    Path.is_file()
    Path.is_dir()

    18.2.6 文件或文件夹是否存在

    Path.exists()

    18.2.7 创建文件

    p.touch() :相当于Linux命令中的touch

    示例代码如下所示:

    from pathlib import Path
    
    filePath=r"C:UsersAdministratorPycharmProjectssurpass	est	est.txt"
    p=Path(filePath)
    p.touch()
    

    18.2.8 删除文件夹或文件

    p.unlink():删除文件
    p.rmdir():删除空目录,如果目录不为空,则会出现报错

    本文地址:https://www.cnblogs.com/surpassme/p/13034964.html
    本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:
    MyQRCode.jpg

  • 相关阅读:
    c++ explicit 用法摘抄
    FBX SDK 从2012.1 到 2013.3 变化
    虚幻4 虚拟漫游场景 制作过程
    3DMAX 建立场景 工作流程
    保存路径选择对话框
    MFC 简单输出EXCEL
    快速使用Log4Cpp
    C# 调用 MFC DLL
    VS建立可供外部调用的MFC类DLL,C#调用MFC调用
    面试中被问到 “你对加班的看法” 该如何回答?
  • 原文地址:https://www.cnblogs.com/surpassme/p/13034964.html
Copyright © 2020-2023  润新知