疑问:如果我们要打开操作一个文件 是用相对路径好 还是绝对路径好?
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
#导入os模块
import os
os.mkdir('alise') #本级目录下新建
1. 跨级新建文件夹目录:
1.用/符号来代表路径的不同层级
2.必须确保上面的层级是存在的
#导入os模块
import os
os.mkdir('alise/susan') #新建相对路径
os.mkdir('D:\\T_PYTHON') #新建绝对路径
2.路径什么情况下必须用双斜杠?
import os
os.mkdir('D:\t_paython')
转义字符,可以通过加 / 还有R r来让转义字符失效
import os
os.mkdir('D:\\t_paython')
os.mkdir(r'D:\t_paython')
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.删除文件夹 也是一级一级的删除
不推荐大家一次删除
import os
os.rmdir('alise') #删除存在文件夹的文件夹,报错OSError: [WinError 145] 目录不是空的。: 'alise'
os.rmdir('alise/susan') #删除文件夹 也是一级一级的删除
2.拓展:python可否强制删除?
第一种,使用递归方法:
import os
def rmdir(dir):
#判断是否是文件夹,如果是,递归调用rmdir()函数
if(os.path.isdir(dir)):
#遍历地址下的所有文件及文件夹
for file in os.listdir(dir):
#进入下一个文件夹中进行删除
rmdir(os.path.join(dir,file))
#如果是空文件夹,直接删除
if (os.path.exists(dir)):
os.rmdir(dir)
print(dir,"文件夹删除成功")
#如果是文件,直接删除
else:
if(os.path.exists(dir)):
os.remove(dir)
print(dir,"文件删除成功")
#调用定义函数
rmdir("文件夹地址")
第二种,使用python自带函数
import shutil
shutil.rmtree("文件夹地址")
2.获取路径
1.获取当前工作目录,具体到最后一级目录
os.getcwd() 方法 概述: os.getcwd() 方法用于返回(获取)当前工作目录。 语法: getcwd()方法语法格式:os.getcwd() 参数: 无 返回值: 返回当前进程的工作目录。
getcwd ->Return a unicode string representing the current working directory . 返回当前文件的工作"目录"
import os
path=os.getcwd()
print('当前路径为:{0}'.format(path))
2.获取当前文件所在的绝对路径,具体到模块名
os.path:获取路径; realpath = abspath 绝对路径 ,“__file__”python中的静态变量,表示当前文件它本身(正在编辑的,代码正在运行的文件)
import os
path_2=os.path.realpath(__file__)
print('2当前文件的绝对路径是:{0}'.format(path_2))
3.如何拼接路径
1.用“+”拼接的方式:
导入os模块
import os
#“os.getcwd()”获取当前工作目录路径,用"+"拼接的"\python01"表示在当前路径下新建一个叫“python01”的文件夹,但是拼接符号后面不能是单纯的字符串,需要加“\”等符号
new_path_1=os.getcwd()+"\python01"
#可以不打印出路径,打印出的是新建文件夹的路径
print(new_path_1)
#新建文件夹
os.mkdir(new_path_1)
2.用jion
"join"拼接、连接、组合的意思,def join(path, *paths):有两个参数path是要拼接的路径,属于位置参数;*paths是拼接的子路径,其属于不定长类型的数据
实例:
#导入os模块
import os
#“os.getcwd()”获取当前路径,"python666"表示要在当前路径下拼接一个叫“python666”的文件夹,不需要在文件夹名称前加“/”等符号
new_path_2=os.path.join(os.getcwd(),"python666")
#打印出新建文件夹的路径
print(new_path_2)
#新建文件夹
os.mkdir(new_path_2)
3. 跨级新建目录
1.跨级新建目录时,要确保最后一级目录前面的目录都是存在的
导入os模块
import os
new_path_2=os.path.join(os.getcwd(),"python666","sub_1")
#打印出新建文件夹的路径
print(new_path_2)
#新建文件夹
os.mkdir(new_path_2)
2.路径之间可以不分开写,用\等符号表示路径之间的层级,sub_2是python666的子路径
导入os模块
import os
new_path_2=os.path.join(os.getcwd(),"python666\sub_2")
#打印出新建文件夹的路径
print(new_path_2)
#新建文件夹
os.mkdir(new_path_2)
4.其他用法
1. 如何判断是文件还是目录?
1.‘isfile’判断是否是文件,返回值:布尔值
import os
print(os.path.isfile(__file__))
print(os.path.isfile(os.getcwd()))
2.'isdir'判断是否是目录,返回值:布尔值
import os
print(os.path.isdir(os.getcwd()))
print(os.path.isdir(__file__))
2.如何判断文件/目录路径是否存在?
用exists()判断是否存在文件,返回值:布尔值
import os.path
print(os.path.exists("F:\python11\class_11\class_if01.py"))
print(os.path.exists('007_list.py'))
3.罗列出当前路径的所有文件和目录
import os
print(os.listdir(os.getcwd()))
os.listdir() 方法 概述 os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。 它不包括 . 和 .. 即使它在文件夹中。 只支持在 Unix, Windows 下使用。 语法 listdir()方法语法格式:os.listdir(path) 参数 path -- 需要列出的目录路径 返回值 返回指定路径下的文件和文件夹列表。
5.拓展题
给定一个路径,请打印出所有的路径(直到这个路径下没有目录为止) 思路:递归函数 相当于打印所有路径出来 方法一:
#导入os模块
import os
path_list = []
def get_all(path):
'''path =r'D:\WorkSpace\pythonProject\ji_chu
列出指定路径下的所有目录和文件'''
paths = os.listdir(path)
#遍历class_11下的所有路径
for i in paths:
com_path = os.path.join(path,i)
# print(com_path)
#判断是否是目录
if os.path.isdir(com_path):
get_all(com_path) # 如果该路径是目录,则调用自身方法
elif os.path.isfile(com_path):
path_list.append(com_path) # 如果该路径是文件,则追加到path_list中
# print(com_path) 打印所有文件的绝对路径
print(com_path) # 打印所有文件和目录的绝对路径
print("D:\WorkSpace\pythonProject\ji_chu包括如下文件:")
# 调用函数,指定路径
get_all(path=r'D:\WorkSpace\pythonProject\ji_chu')
方法二:
import os
def get_full_path(current_working_directory):
for path in os.listdir(current_working_directory):
if os.path.isdir(os.path.join(current_working_directory, path)):
new_current_working_directory = os.path.join(current_working_directory, path)
print("{}还需要做进一步处理".format(path))
get_full_path(new_current_working_directory)
else:
print("这个是已经穷尽的路径:", os.path.join(current_working_directory, path))
get_full_path(os.getcwd())