赞
踩
Python对目录的操作需要用到内置函数os与os.path
本章目录
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) | 用于判断路径是否有效 |
# 查询当前相对路径
- import os
- print(os.getcwd())
'运行
运行结果:
- import os
- print(os.path.abspath(r"text.txt"))
'运行
运行结果:
exists函数
可采用绝对路径或者相对路径
返回值: False 为不存在 True为存在
可以判断文件或者目录都可以
- import os
- print(os.path.exists("C:\\demo"))
'运行
注意: 如果指定的目录有多级,且最后一级的上级目录不存在,则会抛出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()递归函数
- # 注意 要用 \ 转义一下
os.mkdir 创建一级目录 os.makedirs用于递归创建目录
格式:
os.makedirs(file_name,mode=0o777)
参数说明:
file_name : 用于指定要创建的目录,可以使用绝对路径,也可以使用相对路径
mode: 用于指定数值模式,默认为 0o777。该参数在非UNIX系统上无效或被忽略
用法:
- import os
-
- os.makedirs("D:\\test\dir\test\test") # 创建多级目录
使用 os.rmdir()函数删除目录 ,注意这里只能删除空目录,如果想删除有内容的目录需要用到内置函数shutil,下面展示俩种的写法
- import os
- os.rmdir("D:\\test\test") # 删除空目录 “\”转义
-
- import shutil
- shutil.rmtree("D:\\test") # 删除非空目录
遍历目录就是对指定目录下的全部目录包括子目录、文件等全部显示,在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指定的文件 |
- import os
- os.remove("test.txt") # 删除文件test.txt 可以加路径但是要加 转义字符“\”
-
- 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))
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。