【python实用性】文件系统基本讲解及用法: “增删改查“

一. 增: 创建文件

  1. 创建脚本文件(例如: .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')")
  1. 创建目录文件:
    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 可以单一文件重命名,也可以进行层级重命名
    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.2 os.renames(old=’<要重命名的目录>‘, new=‘<文件或目录的新名字>’) 用于递归重命名目录或文件,可以同时给传入old的path上的所有文件进行重命名,也可以只重命名对应层级的目录名称; 命名规则同 os.rename() 方法
    # 全路径  test11\test12\test,将其中前两级的目录名称进行重命名
    os.renames(old='test11/test12', new='test13/test14')
    
    1.3 shutil.move(src, dst, copy_function=copy2) :主要用于移动文件或目录,但在同一文件系统内,它也可以用来重命名文件;只能重命名文件系统除外层外的目录/文件,否则会变成新的文件系统
    • src : 源文件/目录的路径
    • dst:目标位置的路径,可以是目标文件/目录的新名称,或者是目标目录的路径
    • copy_function=copy2:可选参数,默认为 shutil.copy2,可调用参数/函数,用于执行实际的拷贝操作,shutil.copy2 会拷贝文件并尽量保留元数据(如修改时间),如果你有特定需求,比如只关心内容而不关心元数据,可以改为使用 shutil.copy;这个参数允许用户自定义拷贝行为,以适应不同的需求;
    # 全路径: test15\test16\test  重命名第2级目录名称,还在当前文件系统中
    shutil.move(src='test15/test16', dst='test15/test18')
    
    1.4 修改脚本文件内容: with open(file=‘<文件名称.后缀名>’, mode=‘a+’, encode=‘<编码格式>’)
    • 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() # 将这个文件进行关闭,以防止后面操作产生冲突
    

四. 查: 查看文件系统

  1. 获取当前路径: os.getcwd() 返回当前路径值

    print(os.getcwd())
    
  2. 获取当前路径的二进制格式: os.getcwdb() 返回当前路径值

    print(os.getcwdb())
    
  3. os.listdir(path=‘<需要列出的目录路径>’) : 用于返回指定的文件夹包含的文件或文件夹的名字的列表

    # 列出当前路径下的所有文件/目录
    print(os.listdir(path='.'))
    
  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值