zoukankan      html  css  js  c++  java
  • Python3笔记049

    第10章 文件及目录操作

    10.2 目录操作

    目录操作:创建、遍历、删除、拷贝、路径、判断

    1、os模块

    # 获取当前操作系统类型
    import os
    t = os.name
    print(t)
    output:
    nt
    
    # 获取当前操作系统路径分隔符
    import os
    t = os.sep
    print(t)
    output:
    
    

    2、路径

    定义:用于定位一个文件或目录的字符串被称为一个路径,分为绝对路径和相对路径
    
    • 相对路径

    当前工作目录:是指当前文件所在的目录,可用getcwd()函数获取。

    # 获取当前的工作目录
    import os
    t = os.getcwd()
    print(t)
    output:
    D:1Pythonpythonbasic
    

    在表示路径的字符串前面加上字母r,那么该字符将原样输出

    • 绝对路径

    绝对路径是指在使用文件时指定文件的实际路径,它不依赖于当前目录。可以用abspath()函数获取一个文件的绝对路径

    # 绝对路径用os.path.abspath(path)
    import os
    t = os.path.abspath("work1.txt")
    print(t)
    output:
    D:1Pythonpythonbasicwork1.txt
    
    • 拼接路径

    将两个或多个路径拼接在一起,可使用os.path模块提供的join()函数

    # 拼接路径用os.path.join(path1[,path2[,......]])
    

    3、判断文件或目录是否存在

    # 判断文件是否存在用os.path.exists(path)
    import os
    t = os.path.exists("work1.txt")
    print(t)
    output:
    True
    

    4、创建目录

    os.mkdir(path,mode=0o777) # 创建一级目录
    
    # 递归的创建目录
    import os
    os.makedirs('tmp/python/fileop',exist_ok=True)
    

    会在当前工作目录下面创建 tmp目录,在tmp目录下面再创建 python目录,在Python目录下面再创建fileop目录

    exist_ok=True 指定了,如果某个要创建的目录已经存在,也不报错

    5、删除目录

    os.rmdir(path) # 只能删除空目录
    import shutil 
    shutil.rmtree("C:\demo\test") # 递归删除目录,删除非空目录
    
    shutil.rmtree() 可以递归的删除某个目录所有的子目录和子文件
    import shutil 
    shutil.rmtree('tmp')
    
    # 递归删除某一目录下的子目录及文件用rmtree方法
    import shutil
    
    filename = r"D:1Pythonpythonbasicwork1"
    if os.path.exists(filename) == True:
        shutil.rmtree(filename)
        if os.path.exists(filename) == False:
            print("目录存在,已被删除!")
    else:
        print("目录不存在,未执行删除操作!")
    

    显示目录

    列出某一目录下所有文件和目录

    # 显示目录用os.listdir("路径"),类似于dir
    import os
    t = os.listdir(r"d:1pythonpythonbasic")
    print(t)
    output:
    ['class.py', 'dict.py', 'file.py', 'func.py', 'keywordlist.py', 'list.py', 'r1.txt', 'string1.py', 'sum1-100.py', 'traversal_strings.py', 'while.py', 'with_as.py', 'work1.txt', '__init__.py', '测试工匠麻辣烫博客.png']
    

    6、遍历目录

    os模块的walk()函数用于遍历目录

    os.walk(top[,topdown][,onerror][,followlinks])
    
    import os
    path = "C:\demo"
    print("【",path,"】目录下包括的文件和目录")
    for root, dirs, files in os.walk(path, topdown=True):
    	for name in dirs:
    		print(".",os.path.join(root,name))
    	for name in files:
    		print("。",os.path.join(root,name))
    

    7、拷贝目录

    如果我们要拷贝一个目录里面所有的内容(包括子目录和文件、子目录里面的子目录和文件,等等)到另外一个目录中,可以使用 shutil的copytree函数。

    如下所示

    from shutil import copytree
    
    # 拷贝 d:/tools/aaa 目录中所有的内容 到 e:/bbb 中
    copytree('d:/tools/aaa', 'e:/new/bbb')
    

    注意拷贝前, 目标目录必须 不存在 ,否则会报错。

    上面的代码执行前面,如果 e:/new/bbb 已经存在,执行到copytree时,就会报错

    上面的代码执行前面,如果 e:/new 这个目录都不存在,执行到copytree时,就会 创建 e:/new 目录,再创建 e:/new/bbb 目录,再拷贝 d:/tools/aaa 目录中所有的内容 到 e:/new/bbb 中。

    上面的代码执行前面,如果 e:/new 这个目录存在,但是 e:/new/bbb 不存在,执行到copytree时,就只会 创建 e:/new/bbb ,再拷贝 d:/tools/aaa 目录中所有的内容 到 e:/new/bbb 中。

    高级操作

    判断一个名字是目录还是文件

    # 判断一个名字是目录还是文件
    os.path.isdir("名称")判断是不是目录
    os.path.isfile("名称")判断是不是文件
    
    import os
    t = os.path.isdir(r"d:1pythonpythonbasic")
    print(t)
    f = os.path.isfile(r"d:1pythonpythonbasicwork1.txt")
    print(f)
    output:
    True
    True
    

    修改文件名、目录名用os.rename()

    # 修改文件名、目录名用os.rename()
    import os
    
    # 修改目录名 d:/tools/aaa 为 d:/tools/bbb
    os.rename('d:/tools/aaa','d:/tools/bbb')
    
    # 修改文件名 d:/tools/first.py 为 d:/tools/second.py
    os.rename('d:/tools/first.py','d:/tools/second.py')
    

    对路径的操作

    # 对于文件名的操作,比如 获取文件名称,文件所在目录,文件路径的拼接等,都可以使用 os.path 模块。
    import os
    p = r"d:1pythonpythonbasicwork1.txt"
    t = os.path.basename(p) # 取文件名
    print(t)
    f = os.path.dirname(p) # 取目录
    print(f)
    j = os.path.join(t, f, os.path.basename(p)) # 拼接
    print(j)
    output:
    work1.txt
    d:1pythonpythonbasic
    d:1pythonpythonbasicwork1.txt
    

    判断文件、目录是否存在

    # 判断一个指定路径的文件或目录是否存在用exists()
    import os
    os.path.exists('d:/systems/cmd.exe')
    os.path.exists('d:/systems')
    

    获取文件的大小和日期

    import time
    getsize = os.path.getsize(r"d:1pythonpythonbasicwork1.txt")
    getmtime = time.ctime(os.path.getmtime(r"d:1pythonpythonbasicwork1.txt"))
    print(getsize)
    print(getmtime)
    output:
    88
    Fri Jul 24 11:34:29 2020
    

    递归的遍历目录下面所有的文件

    假如我们要获取某个目录中所有的 文件, 包括子目录里面的文件。 可以使用 os库中的walk方法

    比如我们要得到某个目录下面所有的子目录 和所有的文件,存放在两个列表中

    可以这样写代码

    import os
    
    # 目标目录
    targetDir = r'd:	mputildistcheck'
    files = []
    dirs  = []
    
    # 下面的三个变量 dirpath, dirnames, filenames
    # dirpath 代表当前遍历到的目录名
    # dirnames 是列表对象,存放当前dirpath中的所有子目录名
    # filenames 是列表对象,存放当前dirpath中的所有文件名
    
    for (dirpath, dirnames, filenames) in os.walk(targetDir):
       files += filenames
       dirs += dirnames
    
    print(fles)
    print(dirs)
    

    如果我们只需要获取目录中所有的文件,或者只需要子目录,可以这样

    import os
    from os.path import isfile, join,isdir
    
    # 目标目录
    targetDir = r'd:	mputildistcheck'
    
    # 所有的文件
    print([f for f in os.listdir(targetDir) if isfile(join(targetDir, f))])
    
    # 所有的目录
    print([f for f in os.listdir(targetDir) if isdir(join(targetDir, f))])
    

    得到目录中指定扩展名的文件和子目录

    # 可以使用glob库
    import glob
    exes = glob.glob(r'd:	mp*.txt')
    
    print(exes)
    
  • 相关阅读:
    人脸识别最新开发经验demo分享
    虹软人脸识别SDK的接入方法
    基于虹软sdk,java实现人脸识别(demo)
    【C#】 基于ArcFace 2.0—视频人脸识别Demo
    基于免费人脸识别的闸机开发及源码分享
    运算符及其应用
    vim 命令
    children lastchild parentNode parentElement
    同步对象锁有效作用域
    在eclipse导入Java 的jar包的方法 JDBC【图文说明】
  • 原文地址:https://www.cnblogs.com/infuture/p/13383444.html
Copyright © 2011-2022 走看看