一. 增: 创建文件
- 创建脚本文件(例如: .txt 、 .js 、 .json 、 .py 等)
使用 with open(file=‘<文件名称.后缀名>’, mode=‘w’, encode=‘<编码格式>’) 方法进行
- mode=‘w’ / mode=‘a’: 表示在文件不存在的时候,会自动创建新文件
- encode : 常用的格式是 UTF-8 格式
import json
with open('test.json', mode='w') as f:
dic = {1: 'test'}
json.dump(dic, f)
f.close() # 将这个文件进行关闭,以防止后面操作产生冲突
with open('Test1/test2/test3/demo1/test1.json', mode='a') as f:
dic = {1: 'test'}
json.dump(dic, f)
with open('test.py', mode='w') as f:
f.write("print('hello world')")
-
创建目录文件:
2.1 创建单个目录: os.mkdir(path[, mode])- path:需要创建的文件路径, 包含目录名称(相对/绝对 路径),仅能创建指定路径中的最后一级目录;如果该目录的上级目录不存在,os.mkdir() 将会抛出 FileNotFoundError 异常
- mode: 为目录设置的权限数字模式 (可以省略,默认的模式为 0777 (八进制))
os.mkdir('test') # 创建单一目录文件 test
2.2 创建多级目录: os.makedirs(name, mode=0o777, exist_ok=False)
- name: 需要创建的文件路径,包含目录名称 (相对/绝对路径),如果指定的路径中任何一部分目录不存在,os.makedirs() 会自动创建这些缺失的目录,包括最终的目录
- mode : 为目录设置的权限数字模式 (可以省略,默认的模式为 0777 (八进制))
- exits_ok : 默认值为 False,表示 如果需要创建的目录已存在再去创建会抛出 FileExistsError异常; exits_ok=True 表示即使需要创建的目录已存在也可以进行再次创建,且不会覆盖之前该目录下的所有文件
import os try: os.makedirs('test', exist_ok=False) except FileExistsError: # test 目录已存在,exist_ok=Flase,处理FileExistsError异常 raise FileExistsError('test') os.makedirs(name='Test/test/test/demo', exist_ok=True)
二. 删:删除文件
-
仅删除脚本文件,不删除文件夹: (例如: .txt 、 .js 、 .json 、 .py 等)
1.1 os.remove(path) : 删除指定路径的文件,只能删除文件,如果要删除的是文件目录则会抛出OSError异常- path : 需要删除的文件的路径
- 无返回值
os.remove(path='test.py') # 删除脚本文件test.py try: # 试图通过os.remove() 去删除demo目录 os.remove(path='Test/test/test/demo') except OSError: # 此处会抛出 OSError异常数据 raise OSError('test')
1.2 os.unlink(path) : 删除文件,如果删除目录文件,则会 返回一个error
- path : 需要删除的文件的路径
- 无返回值
os.unlink(path='Test/test/test/demo') # 删除的是目录文件,将会报错 os.unlink(path='test.json') # 删除 test.json 文件
注意: os.remove() 和 os.unlink() 本质上没有什么区别,都是用来删除脚本文件,不能删除目录文件
-
删除目录文件:
2.1 os.rmdir() : 删除空目录文件,使用这个方法之前必须要先清楚该目录下的所有文件,否则将会抛出 OSError异常try: os.rmdir(path='Test/test/test.py') # Test/test/test/demo 整个目录是这样,如果只删除前两级目录,将会报出 OSError异常 except OSError: # 此处处理 OSError异常,并捕获异常数据 raise OSError('test')
2.2 os.removedirs(name) : 递归删除文件,可以删除目录文件,只能通过传递文件名称单一进行删除文件,不能传入要删除的文件路径否则将会报出NotADirectoryError异常
- name: 需要删除的文件名称
import os try: # 尝试通过传入路径去删除 test.json文件,会抛出NotADirectoryError os.removedirs(name='Test1/test2/test3/demo1/test.json') except NotADirectoryError: # 此处处理 NotADirectoryError 异常,并捕获异常数据 raise NotADirectoryError('test.json') os.removedirs(name='test.py') # 删除文件test.py
2.3 shutil.rmtree(path, ignore_errors=False, οnerrοr=None) : 删除指定目录文件包含此目录下的所有文件,如果path包含多层目录,则只会删除最下层的目录及内部文件
- path: 要删除的目录的路径,此路径必须是实际存在的,否则函数执行时会抛出FileNotFoundError异常
- ignore_errors: 默认值为 False,如果为 True,函数在遇到无法删除的文件或目录时(例如权限不足、文件正在被使用等),将忽略这些错误而继续尝试删除其他文件。如果为 False,则遇到错误时函数会立即停止执行,并抛出OSError异常
- onerror: 可选参数(回调函数),当删除操作遇到错误时,如果提供了这个参数,将会调用这个函数来处理错误**,而不是直接抛出异常或忽略**;这个函数会被传入三个参数:func(遇到错误的函数名,通常是删除操作相关的内部函数)、path(导致错误的文件或目录的路径)、以及 exc_info(一个包含异常类型、值和追踪信息的元组)。你可以自定义错误处理逻辑,比如记录日志、重试操作等
import shutil try: shutil.rmtree(path='demo/test2/test3/demo1') # 给的path实际不存在,则会抛出异常 except FileNotFoundError: # 此处处理 FileNotFoundError异常,并捕获异常数据 raise FileNotFoundError('demo1') shutil.rmtree(path='Test1/test2/test3/demo1') # 删除demo1目录及其内部所有文件
三. 改 : 修改文件
- 修改文件名称:
1.1 os.rename(src=‘<要修改的文件/目录名>’, dst=‘<修改后的文件/目录名>’) 用于重命名文件或目录,从 src 到 dst,如果dst是一个存在的目录, 将抛出FileNotFoundError- src 和 dst 可以单一文件重命名,也可以进行层级重命名
1.2 os.renames(old=’<要重命名的目录>‘, new=‘<文件或目录的新名字>’) 用于递归重命名目录或文件,可以同时给传入old的path上的所有文件进行重命名,也可以只重命名对应层级的目录名称; 命名规则同 os.rename() 方法try: os.rename(src='test', dst='test11') except FileNotFoundError: raise FileNotFoundError('test11') try: # 进行层级重命名: 全路径为 test11\test12\test os.rename(src='test11/test', dst='test11/test12') except FileNotFoundError: raise FileNotFoundError('test11')
1.3 shutil.move(src, dst, copy_function=copy2) :主要用于移动文件或目录,但在同一文件系统内,它也可以用来重命名文件;只能重命名文件系统除外层外的目录/文件,否则会变成新的文件系统# 全路径 test11\test12\test,将其中前两级的目录名称进行重命名 os.renames(old='test11/test12', new='test13/test14')
- src : 源文件/目录的路径
- dst:目标位置的路径,可以是目标文件/目录的新名称,或者是目标目录的路径
- copy_function=copy2:可选参数,默认为 shutil.copy2,可调用参数/函数,用于执行实际的拷贝操作,shutil.copy2 会拷贝文件并尽量保留元数据(如修改时间),如果你有特定需求,比如只关心内容而不关心元数据,可以改为使用 shutil.copy;这个参数允许用户自定义拷贝行为,以适应不同的需求;
1.4 修改脚本文件内容: with open(file=‘<文件名称.后缀名>’, mode=‘a+’, encode=‘<编码格式>’)# 全路径: test15\test16\test 重命名第2级目录名称,还在当前文件系统中 shutil.move(src='test15/test16', dst='test15/test18')
- mode=‘a+’ : 对执行文件进行追加写入操作
- mode=‘w’: 将会对原始文件内容进行覆盖修改
- mode=’w+‘: 在指定文件创建后,可以对该文件写入数据,并且是覆盖式写入
with open('Test1/test2/test3/demo1/test.json', mode='a+') as f: dict = {1: 'test', 2: 'test2', 3: 'test3' } json.dump(dict, f) f.close() # 将这个文件进行关闭,以防止后面操作产生冲突 # 原内容:{"1": "test", "2": "test3", "3": "test3"} # 新内容: {"1": "test", "2": "test3", "3": "test3"} # {"1": "test", "2": "test3", "3": "test3"} with open('Test1/test2/test3/demo1/test.json', mode='w') as f: dict = {1: 'test', 2: 'test3', 3: 'test3' } json.dump(dict, f) # 原内容: {"1": "test", "2": "test2", "3": "test3"} # 新内容: {"1": "test", "2": "test3", "3": "test3"} f.close() # 将这个文件进行关闭,以防止后面操作产生冲突
四. 查: 查看文件系统
-
获取当前路径: os.getcwd() 返回当前路径值
print(os.getcwd())
-
获取当前路径的二进制格式: os.getcwdb() 返回当前路径值
print(os.getcwdb())
-
os.listdir(path=‘<需要列出的目录路径>’) : 用于返回指定的文件夹包含的文件或文件夹的名字的列表
# 列出当前路径下的所有文件/目录 print(os.listdir(path='.'))