编程学习网 > 编程语言 > Python > python os教程(Python内置os模块详解)
2023
06-17

python os教程(Python内置os模块详解)

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教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取