• 018python-绝对路径、相对路径


     疑问:如果我们要打开操作一个文件 是用相对路径好 还是绝对路径好?

    python自带模块 os ,python lib下自带的单独的模块直接使用import引用更合适 

     1.文件夹的新建和删除

     1.新建一个目录/新建一个文件夹

    os.mkdir() 方法
    概述:
    os.mkdir() 方法用于以数字权限模式创建目录。默认的模式为 0777 (八进制)。
    语法:
    mkdir()方法语法格式:os.mkdir(path[, mode])
    参数:
    path -- 要创建的目录
    mode -- 要为目录设置的权限数字模式
    返回值:
    该方法没有返回值。
    Python3 OS 文件/目录方法:https://www.runoob.com/python3/python3-os-file-methods.html
    1. #导入os模块
    2. import os
    3. os.mkdir('alise') #本级目录下新建

    1. 跨级新建文件夹目录:

    1.用/符号来代表路径的不同层级

    2.必须确保上面的层级是存在的

    1. #导入os模块
    2. import os
    3. os.mkdir('alise/susan') #新建相对路径
    4. os.mkdir('D:\\T_PYTHON') #新建绝对路径

     2.路径什么情况下必须用双斜杠?

    1. import os
    2. os.mkdir('D:\t_paython')

    转义字符,可以通过加  / 还有R  r来让转义字符失效

    1. import os
    2. os.mkdir('D:\\t_paython')
    3. os.mkdir(r'D:\t_paython')
    4. os.mkdir(R'D:\t_paython')

    2.文件夹的删除

    os.rmdir() 方法
    概述:
    os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
    语法:
    rmdir()方法语法格式:os.rmdir(path)
    参数:
    path -- 要删除的目录路径
    返回值:
    该方法没有返回值
    Python3 OS 文件/目录方法:https://www.runoob.com/python3/python3-os-file-methods.html
    os.remove() 方法
    概述:
    os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。
    在Unix, Windows中有效
    语法:
    remove()方法语法格式:os.remove(path)
    参数:
    path -- 要移除的文件路径
    返回值:
    该方法没有返回值

     1.删除文件夹 也是一级一级的删除

    不推荐大家一次删除

    1. import os
    2. os.rmdir('alise') #删除存在文件夹的文件夹,报错OSError: [WinError 145] 目录不是空的。: 'alise'
    3. os.rmdir('alise/susan') #删除文件夹 也是一级一级的删除

     2.拓展:python可否强制删除?

    第一种,使用递归方法:

    1. import os
    2. def rmdir(dir):
    3. #判断是否是文件夹,如果是,递归调用rmdir()函数
    4. if(os.path.isdir(dir)):
    5. #遍历地址下的所有文件及文件夹
    6. for file in os.listdir(dir):
    7. #进入下一个文件夹中进行删除
    8. rmdir(os.path.join(dir,file))
    9. #如果是空文件夹,直接删除
    10. if (os.path.exists(dir)):
    11. os.rmdir(dir)
    12. print(dir,"文件夹删除成功")
    13. #如果是文件,直接删除
    14. else:
    15. if(os.path.exists(dir)):
    16. os.remove(dir)
    17. print(dir,"文件删除成功")
    18. #调用定义函数
    19. rmdir("文件夹地址")

      第二种,使用python自带函数

    1. import shutil
    2. shutil.rmtree("文件夹地址")

    2.获取路径

    1.获取当前工作目录,具体到最后一级目录

    os.getcwd() 方法
    概述:
    os.getcwd() 方法用于返回(获取)当前工作目录。
    语法:
    getcwd()方法语法格式:os.getcwd()
    参数:
    无
    返回值:
    返回当前进程的工作目录。
    

     getcwd ->Return a unicode string representing the current working directory . 返回当前文件的工作"目录"

    1. import os
    2. path=os.getcwd()
    3. print('当前路径为:{0}'.format(path))

     2.获取当前文件所在的绝对路径,具体到模块名

    os.path:获取路径; realpath = abspath 绝对路径 ,“__file__”python中的静态变量,表示当前文件它本身(正在编辑的,代码正在运行的文件)

    1. import os
    2. path_2=os.path.realpath(__file__)
    3. print('2当前文件的绝对路径是:{0}'.format(path_2))

    3.如何拼接路径

    1.用“+”拼接的方式:

    1. 导入os模块
    2. import os
    3. #“os.getcwd()”获取当前工作目录路径,用"+"拼接的"\python01"表示在当前路径下新建一个叫“python01”的文件夹,但是拼接符号后面不能是单纯的字符串,需要加“\”等符号
    4. new_path_1=os.getcwd()+"\python01"
    5. #可以不打印出路径,打印出的是新建文件夹的路径
    6. print(new_path_1)
    7. #新建文件夹
    8. os.mkdir(new_path_1)

     2.用jion

    "join"拼接、连接、组合的意思,def join(path, *paths):有两个参数path是要拼接的路径,属于位置参数;*paths是拼接的子路径,其属于不定长类型的数据

    实例:

    1. #导入os模块
    2. import os
    3. #“os.getcwd()”获取当前路径,"python666"表示要在当前路径下拼接一个叫“python666”的文件夹,不需要在文件夹名称前加“/”等符号
    4. new_path_2=os.path.join(os.getcwd(),"python666")
    5. #打印出新建文件夹的路径
    6. print(new_path_2)
    7. #新建文件夹
    8. os.mkdir(new_path_2)

    3. 跨级新建目录

    1.跨级新建目录时,要确保最后一级目录前面的目录都是存在的

    1. 导入os模块
    2. import os
    3. new_path_2=os.path.join(os.getcwd(),"python666","sub_1")
    4. #打印出新建文件夹的路径
    5. print(new_path_2)
    6. #新建文件夹
    7. os.mkdir(new_path_2)

      2.路径之间可以不分开写,用\等符号表示路径之间的层级,sub_2是python666的子路径

    1. 导入os模块
    2. import os
    3. new_path_2=os.path.join(os.getcwd(),"python666\sub_2")
    4. #打印出新建文件夹的路径
    5. print(new_path_2)
    6. #新建文件夹
    7. os.mkdir(new_path_2)

     4.其他用法

    1. 如何判断是文件还是目录?

    1.‘isfile’判断是否是文件,返回值:布尔值

    1. import os
    2. print(os.path.isfile(__file__))
    3. print(os.path.isfile(os.getcwd()))

      2.'isdir'判断是否是目录,返回值:布尔值

    1. import os
    2. print(os.path.isdir(os.getcwd()))
    3. print(os.path.isdir(__file__))

     2.如何判断文件/目录路径是否存在?

    用exists()判断是否存在文件,返回值:布尔值

    1. import os.path
    2. print(os.path.exists("F:\python11\class_11\class_if01.py"))
    3. print(os.path.exists('007_list.py'))

     3.罗列出当前路径的所有文件和目录

    1. import os
    2. print(os.listdir(os.getcwd()))
    os.listdir() 方法 
    概述 
    os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。 
    它不包括 . 和 .. 即使它在文件夹中。 
    只支持在 Unix, Windows 下使用。 
    语法 
    listdir()方法语法格式:os.listdir(path) 
    参数 
    path -- 需要列出的目录路径 
    返回值 
    返回指定路径下的文件和文件夹列表。
    

     5.拓展题

    给定一个路径,请打印出所有的路径(直到这个路径下没有目录为止) 思路:递归函数 相当于打印所有路径出来 方法一:

    1. #导入os模块
    2. import os
    3. path_list = []
    4. def get_all(path):
    5. '''path =r'D:\WorkSpace\pythonProject\ji_chu
    6. 列出指定路径下的所有目录和文件'''
    7. paths = os.listdir(path)
    8. #遍历class_11下的所有路径
    9. for i in paths:
    10. com_path = os.path.join(path,i)
    11. # print(com_path)
    12. #判断是否是目录
    13. if os.path.isdir(com_path):
    14. get_all(com_path) # 如果该路径是目录,则调用自身方法
    15. elif os.path.isfile(com_path):
    16. path_list.append(com_path) # 如果该路径是文件,则追加到path_list中
    17. # print(com_path) 打印所有文件的绝对路径
    18. print(com_path) # 打印所有文件和目录的绝对路径
    19. print("D:\WorkSpace\pythonProject\ji_chu包括如下文件:")
    20. # 调用函数,指定路径
    21. get_all(path=r'D:\WorkSpace\pythonProject\ji_chu')

    方法二:

    1. import os
    2. def get_full_path(current_working_directory):
    3. for path in os.listdir(current_working_directory):
    4. if os.path.isdir(os.path.join(current_working_directory, path)):
    5. new_current_working_directory = os.path.join(current_working_directory, path)
    6. print("{}还需要做进一步处理".format(path))
    7. get_full_path(new_current_working_directory)
    8. else:
    9. print("这个是已经穷尽的路径:", os.path.join(current_working_directory, path))
    10. get_full_path(os.getcwd())

     

    
                    
  • 相关阅读:
    工业路由器网关的网络协议之NAT技术
    CICD与DevOps
    Java8IntStream数值流的常用操作以及与装箱和拆箱的关系
    python深度学习入门-从零构建CNN和RNN
    哈希(hash)——【C++实现】
    Flume配置4——自定义Source+Sink
    基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制(11.16)
    Spring学习|Bean的作用域、自动装配Bean、注解实现自动装配、Spring注解开发
    了解xss漏洞的简单案例
    回调函数(callback functions)的理解和使用
  • 原文地址:https://blog.csdn.net/weixin_47481102/article/details/126118686