Python3文件、目录的操作

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))

运行结果:

猜你喜欢

转载自blog.csdn.net/weixin_58279299/article/details/126251286