01、认识os内置模块
os模块,主要是为了获取操作系统的文件及目录。
02、模块导入
import os
03、路径的斜杆
讲解os的常见做法之前,我们还是先普及下斜杆的用法,到底是左斜杆还是右斜杆,是一条斜杆,还是两条斜杆?
叫法:
/:左斜杆、正斜杆
\:右斜杆、反斜杆
记法:
写“八”,先左右,先正后反
首先,我们再E盘下创建文件夹n
一般情况下,电脑的文件目录使用的都是反斜杠“E:\n”。
但是,在代码中直接使用“\字符”则会被认为是要转义斜杠后的字符,如:\n,转义n表示换行,这个时候就不是表示n了,所以我们在使用路径的时候,如果用的是右斜杆,则带上或双右斜杆。
带上r:r,raw string,字符直接变为原始字符,通俗理解就是原样输出字符串,r后面是什么字符串则表示什么字符串,如“\n”,则不会认为是换行了,而是字符n。
双右斜杆:取消转义,通俗理解就是,被转义后再转义回来,那不就是原字符么。如\n转义成了换行符,那再添加\则将换行符转义回字符n了
import os
# 不带r,被转义
file1 = 'E:\n'
print("这个是被转义:{0}".format(file1))
# 带上r,取消转义
file2 = r'E:\n'
print("这个是取消转义:{0}".format(file2))
# 双右斜杆
file3 = r'E:\n'
print("这个是双右斜杆:{0}".format(file3))
# 输出,被转义,则是E后面换行
>> 这个是被转义:E:
# 取消转义,则原样输出
>> 这个是取消转义:E:\n
# 双右斜杆
>> 这个是双右斜杆:E:\n
接下来我们谈谈什么情况下用左斜杆呢?
上面说到的右斜杆也就是反斜杠是一个反义字符,会转义后面的字符,但是左斜杆也就是正斜杠就没有这个烦恼了,可以直接使用,还有一个区别就是,Windows的文件路径一般用的是右斜杆,而Linux大都用的左斜杠。
import os
# 左斜杆
file1 = 'E:/n'
print("这个是左斜杆:{0}".format(file1))
# 输出
>> 这个是左斜杆:E:/n
后面的讲解我一致都用的双右斜杆,也就是双反斜杠讲解。
04、os模块的常见的用法
获取当前路径
import os
# 当前创建的py文件的路径是:E:\Python_Project/test.py
# 获取当前工作路径
cwd_path = os.getcwd()
print("当前工作路径:{0}".format(cwd_path))
# 输出
>> E:\Python_Project
获取文件列表
import os
# 获取文件列表,列表格式返回
file_list1 = os.listdir()
print("获取的路径下的文件列表:{0}".format(file_list1))
# 传入目录路径,列出某个目录下的所有文件
file_list2 = os.listdir("E:\\")
print("获取的E盘下的文件列表:{0}".format(file_list2))
# 输出,输出当前文件路径下的所有文件
>> 获取的路径下的文件列表:["文件1.txt","文件夹1",.....]
# 输出E盘下的所有文件
>> 获取的E盘下的文件列表:["Python_Project","文件夹2",.....]
创建目录
import os
# 创建目录
# 1、参数传入某个目录路径:则在该路径下创建目录
# 备注:目录必须是未创建的,否则会报错提示“当文件已存在时,无法创建该文件”
os.mkdir("E:\\目录2")
# 判断创建的目录是否存在
file1_isexist = os.path.exists("E:\\目录2")
print("创建后检查目1是否存在:{0}".format(file1_isexist))
# 输出,创建后可到传入的目录路径下查看是否创建成功
>> 创建后检查目1是否存在:True
删除空目录
import os
# 删除刚创建的目录1
# 备注:删除的目录1中若存在其他的文件会报错
os.rmdir("E:\\目录1")
# 删除后判断目录1是否存在
file1_isexist = os.path.exists("E:\\目录1")
print("删除后检查目录1是否存在:{0}".format(file1_isexist))
# 输出
>> 删除后检查目录1是否存在:False
创建多层目录
import os
# 创建多层目录:创建父目录,同时创建子目录
os.makedirs("E:\\父目录\\子目录")
# 判断创建的文件夹
multi_isexist = os.path.exists("E:\\父目录\\子目录")
print("创建后检查是否创建成功:{0}".format(multi_isexist))
# 输出,创建后可到对应的目录路径下查看是否创建成功
>> 创建后检查是否创建成功:True
删除非空目录
删除多级目录则需要借用shutil模块的方法
import shutil
# 删除非空目录:父目录下包含子目录,想要将父目录和子目录一起删除
shutil.rmtree("E:\\父目录")
multi_isexist = os.path.exists("E:\\父目录")
print("删除后检查目录是否存在:{0}".format(multi_isexist))
# 输出,同时将父目录和子目录一起删除
>> 删除后检查目录是否存在:False
重命名目录
import os
# 创建目录:旧目录
os.mkdir("E:\\旧目录")
# 重命名
old_name = "E:\\旧目录"
new_name = "E:\\新目录"
os.rename(old_name,new_name)
# 传入目录路径,列出某个目录下的所有文件
file_list = os.listdir("E:\\")
print("获取的E盘下的文件列表:{0}".format(file_list))
# 输出
>> >> 获取的E盘下的文件列表:["Python_Project","文件夹2","新目录",.....]
删除文件
import os
# 使用open的方法创建文件
f = open("E:\\test1.txt","a")
f.write("哈哈哈哈哈")
f.close()
# 判断创建后的文件是否存在
file_isexist = os.path.exists("E:\\test1.txt")
print("创建后检查文件是否存在:{0}".format(file_isexist))
# 删除创建的文件test1.txt
os.remove("E:\\test1.txt")
# 判断删除后的文件是否存在
file_isexist = os.path.exists("E:\\test1.txt")
print("删除后检查文件是否存在:{0}".format(file_isexist))
# 输出
>> 创建后检查文件是否存在:True
>> 删除后检查文件是否存在:False
判断是否是目录
import os
# 判断是否是目录
dirname = "E:\\新建文件夹"
isdir = os.path.isdir(dirname)
print("是否是目录:{0}".format(isdir))
# 输出
>> 是否是目录:True
判断是否是文件
import os
filename = "E:\\test.xlsx"
# 判断是否是文件
isfile = os.path.isfile(filename)
print("是否是文件:{0}".format(isfile))
# 输出
>> 是否是文件:True
获取绝对路径
import os
# 获取当前路径的绝对路径
abs_path1 = os.path.abspath(__file__)
print("当前路径的绝对路径是:{0}".format(abs_path1))
# 传入指定的文件,获取当前路径下某一个文件的绝对路径
abs_path2 = os.path.abspath("test.xlsx")
print("传入文件的绝对路径是:{0}".format(abs_path2))
# 输出
>> 当前路径的绝对路径是:E:\Python_Project\test.py
>> 传入文件的绝对路径是:E:\Python_Project\test.xlsx
路径的切分
import os
# 获取当前路径的绝对路径
abs_path1 = os.path.abspath(__file__)
# 将绝对路径切分成路径和文件名
dirname,filename = os.path.split(abs_path1)
print("目录路径是:{0}\n文件名是:{1}".format(dirname,filename))
# 输出
>> 目录路径是:E:\Python_Project
>> 文件名是:test.py
路径的拼接
import os
dirname = "E:\\"
filename = "test.txt"
path = os.path.join(dirname,filename)
print("拼接后的路径是:{0}".format(path))
# 输出
>> 拼接后的路径是:E:\test.txt
单独获取绝对路径的目录路径
备注:只会获取当前
import os
# # 获取当前路径的绝对路径
abs_path1 = os.path.abspath(__file__)
print("当前路径的绝对路径是:{0}".format(abs_path1))
dirname = os.path.dirname(abs_path1)
print("目录路径是:{0}".format(dirname))
# 输出
>> 当前路径的绝对路径是:E:\Python_Project\test.py
>> 目录路径是:E:\Python_Project
单独获取绝对路径的文件名
import os
# # 获取当前路径的绝对路径
abs_path1 = os.path.abspath(__file__)
print("当前路径的绝对路径是:{0}".format(abs_path1))
base_name = os.path.basename(abs_path1)
print("文件名是:{0}".format(base_name))
# 输出
>> 当前路径的绝对路径是:E:\Python_Project\test.py
>> 文件名是:test.py
获取目录大小
import os
# 获取目录的大小,单位是字节
dirname = "E:\\Python_Project"
dir_size = os.path.getsize(dirname)
print("目录的大小是:{0}".format(dir_size))
# 输出
>> 3192
05、课堂练习
基础版
设计一个函数,输入一个路径,列出路径下的所有目录和文件
不考虑目录下还有子目录的情况,仅判断当前路径下
import os
def isdir_or_isfile(path):
# 创建一个列表存储目录
dir_list = []
# 创建一个列表存储文件
file_list = []
# 获取路径下的方所有文件
lists = os.listdir(path)
print("获取路径下的方所有文件:{0}".format(lists))
for i in lists:
# isdir和isfile需要传入绝对路径才可以判断
# 所以需要拼接成文件名的绝对路径
abs_path = os.path.join(path,i)
if os.path.isdir(abs_path):
# 判断是目录则添加至dir_list
dir_list.append(i)
elif os.path.isfile(abs_path):
# 判断是文件则添加至file_list
file_list.append(i)
else:
print("路径内目录可能为空")
# 分别打印出所有的目录和文件
print("目录有:{0}".format(dir_list))
print("文件有:{0}".format(file_list))
# 调用函数
isdir_or_isfile("E:\\")
# 输出
>> 获取E:\第一层目录下的方所有文件:['test.txt', 'test.xls', '第二层目录']
>> E:\第一层目录的目录有:['第二层目录']
>> E:\第一层目录的文件有:['test.txt', 'test.xls']
进阶版
如果子目录下还有文件,则递归查找
import os
def isdir_or_isfile(path):
# 创建一个列表存储目录
dir_list = []
# 创建一个列表存储文件
file_list = []
# 获取路径下的方所有文件
lists = os.listdir(path)
print("获取{0}下的方所有文件:{1}".format(path,lists))
for i in lists:
# isdir和isfile需要传入绝对路径才可以判断
# 所以需要拼接成文件名的绝对路径
abs_path = os.path.join(path,i)
if os.path.isdir(abs_path):
# 判断是目录则添加至dir_list
dir_list.append(i)
# 如果是目录且非空则继续递归查询
if len(os.listdir(abs_path)) != 0:
isdir_or_isfile(abs_path)
elif os.path.isfile(abs_path):
# 判断是文件则添加至file_list
file_list.append(i)
else:
print("路径内文件和目录可能为空")
# 分别打印出所有的目录和文件
print("{0}的目录有:{1}".format(path,dir_list))
print("{0}的文件有:{1}".format(path,file_list))
# 调用函数
isdir_or_isfile("E:\\第一层目录")
以上就是“python os教程(Python内置os模块详解)”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/11092/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取