Python对目录的操作需要用到内置函数os与os.path
本章目录
模块说明
操作详解
1、查询相对路径
2、查询绝对路径
3、判断目录或文件是否存在
4、创建目录
5、创建多级目录
6、删除目录
7、遍历目录
高级文件操作
1、删除文件
2、重命名文件与目录
获取文件基本信息
模块说明
os模块函数
| 函数 | 说明 |
| getcwd() | 返回当前的工作目录 |
| listdir(path) | 返回指定路径下文件和目录信息 |
| mkdir(path[,mode]) | 创建目录 |
| makedirs(path1/path2....[,mode]) | 创建多级目录 |
| rmdir(path) | 删除目录 |
| removedirs(path1/path2) | 删除多级目录 |
| chdir(path) | 把path设置为当前工作目录 |
| walk(top[,topdown[,onerror]]) | 遍历目录树,该方法返回一个元组,包括所有路径名、所有目录列表和文件列表3个元素 |
os.path模块函数
| 函数 | 说明 |
| abspath(path) | 用于获取文件或目录的绝对路径 |
| exists(path) | 用于判断目录或文件是否存在,如果存在则返回True,否则False |
| join(path,name) | 将目录与目录或者文件名拼接 |
| splitext() | 分离文件名和扩展名 |
| basename(path) | 从一个目录中提取文件名 |
| dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
| isdir(path) | 用于判断路径是否有效 |
操作详解
1、查询相对路径
# 查询当前相对路径
import os print(os.getcwd())
讯享网
运行结果:
2、查询绝对路径
讯享网import os print(os.path.abspath(r"text.txt"))
运行结果:

3、判断目录或文件是否存在
exists函数
可采用绝对路径或者相对路径
返回值: False 为不存在 True为存在
可以判断文件或者目录都可以
import os print(os.path.exists("C:\\demo"))
4、创建目录
注意: 如果指定的目录有多级,且最后一级的上级目录不存在,则会抛出FileNotFoundError的异常错误,创建失败,解决办法: 1、用多级目录的方式创建 2.编写递归函数调用os.mkdir函数实现,代码如下
os.path.split('PATH') # 会拆分成两个元组的形式 一个元组为路径 一个元组为创建的文件名称
1.PATH指一个文件的全路径作为参数

2.如果给出的是一个目录和文件名,则输出路径和文件名
3.如果给出的是一个目录名,则输出路径和为空文件名
讯享网import os # 导入函数 def mkdir_file(path): # 定义递归创建目录函数 if not os.path.exists(path): # 判断是否为有效路径 mkdir_file(os.path.split(path)[0]) # 递归函数调用 else: # 目录存在则直接返回 return os.mkdir(path) # 创建目录 mkdir_file("D:\\test\\文件操作\\test") # 调用mkdir()递归函数 # 注意 要用 \ 转义一下
5、创建多级目录
os.mkdir 创建一级目录 os.makedirs用于递归创建目录
格式:
os.makedirs(file_name,mode=0o777)
参数说明:
file_name : 用于指定要创建的目录,可以使用绝对路径,也可以使用相对路径
mode: 用于指定数值模式,默认为 0o777。该参数在非UNIX系统上无效或被忽略
用法:
讯享网import os os.makedirs("D:\\test\dir\test\test") # 创建多级目录
6、删除目录
使用 os.rmdir()函数删除目录 ,注意这里只能删除空目录,如果想删除有内容的目录需要用到内置函数shutil,下面展示俩种的写法
import os os.rmdir("D:\\test\test") # 删除空目录 “\”转义 import shutil shutil.rmtree("D:\\test") # 删除非空目录
7、遍历目录
遍历目录就是对指定目录下的全部目录包括子目录、文件等全部显示,在os模块中walk函数就是用于实现遍历目录的功能,并以元组的形式返回。
格式:
讯享网os.walk(top,[topdown],[onerror],[followlinks])
参数说明:
top: 用于指定要遍历内容的根目录
topdown: 可选参数,用于指定遍历的顺序,如果值为True 表示自上而下 False 表示自下而上
onerror: 可选参数 用于指定错误处理方式,默认为忽略,如果不想忽略可以制定一个错误处理函数,通常采用默认
followlinks: 可选参数 默认清下,walk函数不会向下转成解析到目录的符号链接,将改参数True,表示用于指定在支持的系统**问由符号链接指向的目
# 示例
import os file = os.walk("test") # 遍历当前目录下的test目录 for i in file: # 循环 遍历的目录 直接打印 遍历的目录是出不来的 print(i)
运行结果:
高级文件操作
os模块提供的与文件相关的函数以及说明
| 函数 | 说明 |
| access(path,accessmode) | 获取文件是否有指定的访问权限(读、写、执行)。accessmode的值是R_OK(读),W_OK(写),X_OK(执行),F_OK(存在)。如果没有指定的权限,则返回1,否则返回0 |
| chmod(path,mode) | 修改文件访问权限 |
| remove(path) | 删除path指定的文件路径 |
| rename(src,dst) | 将文件或目录src 重命名为 dst |
| stat(path) | 返回path指定文件的信息 |
| startfile(path,[operation]) |
使用关联的应用程序打开path指定的文件 |
1、删除文件
讯享网import os os.remove("test.txt") # 删除文件test.txt 可以加路径但是要加 转义字符“\”
2、重命名文件与目录
import os # 修改文件 src = "test\\01\\TEST.txt" # 要修改的文件名称 dst = "test\\01\\Test.txt" # 修改后的文件名称 os.rename(src, dst) # 执行修改 先是要修改的文件名称 然后是修改的文件名称 # 修改目录 catalog = "test\\01" # 要修改的目录名称 catalog1 = "test\\66" # 修改后的目录名称 os.rename(catalog,catalog1)
获取文件基本信息
os.stat 函数用于获取文件基本信息(文件大小,最后一次访问时间,最后一次修改时间,最后一次状态变化时间,索引号,设备名)等信息。注意:需要进行格式转换才可以变得直观
属性说明
| 属性 | 说明 |
| st_mode | 保护模式 |
| st_dev | 设备名 |
| st_ino | 索引号 |
| st_nlink | 硬链接号(被链接数目) |
| st_size | 文件大小,单位为字节 |
| st_mtime | 最后一次修改时间 |
| st_uid | 用户ID |
| st_gid | 组ID号 |
| st_atime | 最后一次访问时间 |
| st_ctime | 最后一次状态变化的时间。系统不同,返回结果也不同。例如windows下返回的是文件创建时间 |
# 举例:
显示文件的 索引号,设备号,文件大小,最后一次访问时间,最后一次修改时间,最后一次状态变化时间
演示转换 与未转换的两种方式对比
讯享网import os fileinfo = os.stat("test\\02\\test.txt") # 输出文件的基本信息 print("未转换显示内容".center(50, "-")) print("索引号:", fileinfo.st_ino) print("设备名:", fileinfo.st_dev) print("文件大小:", fileinfo.st_size, "B") print("最后一次访问时间:", fileinfo.st_atime) print("最后一次修改时间:", fileinfo.st_mtime) print("最后一次状态变化时间:", fileinfo.st_ctime) import time def FormatTaime(longtime): """ 格式化日期的函数 logtime:要格式化的时间 """ return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(longtime)) # 导入时间模块 并以 年月日 时分秒的形式显示 def formatByte(number): """ 格式化文件大小的函数 number:要格式化的字节数 """ for (scale, labei) in [(1024 * 1024 * 1024, "GB"), (1024 * 1024 * 1024, "MB"), (1024, "KB")]: # scale 第一次循环为 :1,073,741,824 labei 第一次循环结果为:GB if number >= scale: # 如果文件大小 大于 等于 1KB return "%.2f %s" % (number * 1.0 / scale, labei) # %.2f :格式化输出 elif number == 1: # 如果文件小于1B return "1 B" else: # 处理小于1b的文件 byte = "%.2f" % (number or 0) return (byte[:-3] if byte.endswith('.00') else byte) + "B" print("已转换显示内容".center(50, "-")) print("索引号:", fileinfo.st_ino) print("设备名:", fileinfo.st_dev) print("文件大小:", formatByte(fileinfo.st_size)) print("最后一次访问时间:", FormatTaime(fileinfo.st_atime)) print("最后一次修改时间:", FormatTaime(fileinfo.st_mtime)) print("最后一次状态变化时间:", FormatTaime(fileinfo.st_ctime))
运行结果:


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/48237.html