当前位置: 首页 > news >正文

11.os模块、编解码、文件操作、try-except语句详解

1 os模块的常见函数

1.1 概述

""" 扩展: os模块的常见函数. os模块概述: 概述: 全称叫: Operating System, 系统模块, 主要是操作: 文件夹, 文件等的.. 常用的函数如下: getcwd() 获取当前的工作目录. chdir() 修改当前工作目录. mkdir() 创建文件夹 os.path.isfile() 判断指定的路径 是否是 存在的 文件 os.path.isdir() 判断指定的路径 是否是 存在的 文件夹 """

1.2 案例

# 导包importos# 演示 os模块的常用函数.print(os.getcwd())# current work directory, 当前的工作目录.# \ 在Python中有特殊含义, 需要转义. 有三种写法.# 写法1: \\# os.chdir('d:\\abc') # 修改当前工作目录, 了解即可, 一般不改. change directory# 写法2: /# os.chdir('d:/abc')# 写法3: r'\'# os.chdir(r'd:\abc')print(os.getcwd())# current work directory, 当前的工作目录.# 文件夹不存在, 就创建, 存在就报错.# os.mkdir('d:/abc/aa') # make directory, 创建文件夹.# 删除文件夹 -> 文件夹必须为空# os.rmdir('d:/abc/aa') # remove directory, 删除文件夹.# 删除文件# os.remove('d:/abc/aa/1.txt')# 查看指定的目录下, 有哪些文件, 文件夹# print(os.listdir('d:/'))# 判断指定的路径是否存在.print(os.path.exists('d:/abc/aa/1.txt'))# Falseprint(os.path.exists('d:/abc'))# True# 判断指定的路径 是否是 存在的 文件print(os.path.isfile('d:/abc/aa/1.txt'))# False, 是文件, 但是不存在print(os.path.isfile(r'D:\图片\小猪.png'))# True# 判断指定的路径 是否是 存在的 文件夹print(os.path.isdir(r'D:\图片\小猪.png'))# Falseprint(os.path.isdir(r'D:\图片'))# True

2 编解码

2.1 概述

""" 编解码概述: 编码: 把我们看懂的内容 -> 我们看不懂, 但是计算机能看懂的内容. 解码: 把我们看不懂, 但是计算机能看懂的内容 -> 我们看懂的内容. 只要出现乱码问题, 原因只有1个: 编解码不一致. 细节(记忆): 中文 -> 在GBK码表中占 2个字节, 在UTF-8码表中占 3个字节. 数字, 字母, 特殊符号 -> 无论在什么码表, 都只占1个字节. """

2.2 案例

# 案例1: 演示 编码. my_str = '你好1aA!' # bytes = my_str.encode() # 默认码表 -> utf-8 b'\xe4\xbd\xa0\xe5\xa5\xbd1aA!' # bytes = my_str.encode('utf-8') # 指定码表 -> utf-8 b'\xe4\xbd\xa0\xe5\xa5\xbd1aA!' bytes = my_str.encode('gbk') # 指定码表 -> gbk b'\xc4\xe3\xba\xc31aA!' print(f'bytes: {bytes}') print('-' * 30) # 案例2: 演示 解码. # 1. 定义 字节形式的字符串. bys = b'\xe4\xbd\xa0\xe5\xa5\xbd1aA!' # 2. 演示解码. # result = bys.decode() # 默认码表 -> utf-8 # result = bys.decode('utf-8') # 指定码表 -> utf-8 result = bys.decode('gbk') # 指定码表 -> gbk # 3. 输出. print(f'result: {result}')

3 文件操作

3.1 文件中写数据

3.1.1 概述
""" 文件概述: 概述: 我们常用的Windows, Mac, Linux系统都是 文件操作系统, 即: 都是以文件的形式来管理数据的. 文件的常见操作: 1. 打开文件. f = open('文件的路径', '模式', '码表') 2. 读写数据. read() 读取数据 write() 写数据 3. 关闭文件. f.close() 关于往文件中 写 数据的操作: write(内容) 往文件中写入指定的数据. writelines(内容) 一次性往文件中写多行. """
3.1.2 案例
# import os # print(os.getcwd()) # D:\workspace\ai_45_bj\pythonProject\day06 # 1. 打开文件. # 写法1: 相对路径 # 参1: ./代表当前目录, 即: os.getcwd()的执行结果. 一般是: 当前项目的目录, 可省略不写. # 参2: 模式, w表示 只写, r表示 只读, a表示 追加 # 参3: 码表 f = open('./data/1.txt', 'w', encoding='utf-8') # 目的地文件不存在, 会自动创建 # 写法2: 绝对路径, 固定的, 写"死"的路径, 以 盘符 开头. # f = open(r'D:\workspace\ai_45_bj\pythonProject\day06\data\1.txt', 'w') # 2. 往文件中写数据. # f.write('abc\n') # f.write('xyz') f.write('命里有官, 书不用翻!') # 3. 释放资源(关闭文件) f.close()

3.2 文件中读数据

3.2.1 概述
""" 从文件中读取数据 相关函数如下: read(n) 不过不写n, 就一次读取文件所有数据, 如果写了, 就一次读取n个数据. readline() 一次读取一行, 封装成字符串, 包括最后的\n readlines() 一次读取所有行, 会把每行数据封装成1个字符串(包括\n), 然后整体放到1个列表中. 实际开发用的拷贝方式: 用 read(n) 一次读取n个数据, 可以是字符, 也可以是字节, 取决于你用的是 r 还是 rb 或者 操作纯文本文件的时候, 也可以用 readline() 一次读取一行. 用 write() 把上述读取到的数据写到文件中即可. """
3.2.2 案例
# 案例1: 演示读取的几种方式. # 1. 打开文件. f = open('data/1.txt', 'r', encoding='utf-8') # 2. 读取数据. # data = f.read() # 不指定长度, 就一次性读取所有数据. # data = f.read(5) # 指定长度, 一次读取5个字符 # data = f.readline() # 一次读取一行. data = f.readlines() # 一次读取所有行. # 3. 打印结果. print(data)

3.3 文件复制

3.3.1 概述
""" 拷贝文件 思路概述: 1. 创建文件对象, 关联: 数据源文件 2. 创建文件对象, 关联: 目的地文件 3. 一次性读取n个字符(字节), 所以用while循环实现. 4. 正常的读取数据即可, 读不到会返回空, 记得做判断. 5. 把上述读取到的数据, 写到目的地文件中. 6. 释放资源. """
3.3.2 案例
# 需求1: 把 1.txt -> 拷贝到 2.txt中 字符形式. # 1. 创建文件对象, 关联: 数据源文件 src_f = open('./data/1.txt', 'r', encoding='utf-8') # 2. 创建文件对象, 关联: 目的地文件 # dst_f = open('./data/2.txt', 'w', encoding='utf-8') # w: 覆盖写入 dst_f = open('./data/2.txt', 'a', encoding='utf-8') # a: 追加写入 # 3. 一次性读取n个字符(字节), 所以用while循环实现. while True: data = src_f.read(5) # 一次读取5个字符, 实际开发一般写 1024的倍数 # 4. 正常的读取数据即可, 读不到会返回空, 记得做判断. if not data: # 空值转布尔会转为 False, 取反后就是: True break # 5. 把上述读取到的数据, 写到目的地文件中. dst_f.write(data) # 6. 释放资源. src_f.close() dst_f.close() print('-' * 30) # 需求2: 把 1.txt -> 拷贝到 2.txt中 字节形式, 不需要指定码表. # 1. 创建文件对象, 关联: 数据源文件 src_f = open('./data/1.txt', 'rb') # 2. 创建文件对象, 关联: 目的地文件 dst_f = open('./data/2.txt', 'wb') # w: 覆盖写入 # 3. 一次性读取n个字符(字节), 所以用while循环实现. while True: data = src_f.read(5) # 一次读取5个字符, 实际开发一般写 1024的倍数 # 4. 正常的读取数据即可, 读不到会返回空, 记得做判断. if not data: # 空值转布尔会转为 False, 取反后就是: True break # 5. 把上述读取到的数据, 写到目的地文件中. dst_f.write(data) # 6. 释放资源. src_f.close() dst_f.close() print('-' * 30) # 需求3: 上述的字节形式, 也是通用的拷贝方式, 它能拷贝任意形式, 例如: 图片, 视频, 音频, 压缩包等等. # 需求: 拷贝图片. # 1. 创建文件对象, 关联: 数据源文件 src_f = open('./data/a.jpg', 'rb') # 2. 创建文件对象, 关联: 目的地文件 dst_f = open('./data/b.jpg', 'wb') # w: 覆盖写入 # 3. 一次性读取n个字符(字节), 所以用while循环实现. while True: data = src_f.read(5) # 一次读取5个字符, 实际开发一般写 1024的倍数 # 4. 正常的读取数据即可, 读不到会返回空, 记得做判断. if not data: # 空值转布尔会转为 False, 取反后就是: True break # 5. 把上述读取到的数据, 写到目的地文件中. dst_f.write(data) # 6. 释放资源. src_f.close() dst_f.close() print('-' * 30) # 需求4: 拷贝文本, 一次读写一行, 部分场景下可能会用到, 看看就行了, 起始就改1个地方. # 1. 创建文件对象, 关联: 数据源文件 src_f = open('./data/1.txt', 'r', encoding='utf-8') # 2. 创建文件对象, 关联: 目的地文件 dst_f = open('./data/2.txt', 'w', encoding='utf-8') # w: 覆盖写入 # 3. 一次性读取n个字符(字节), 所以用while循环实现. while True: data = src_f.readline() # 一次读取一行. # 4. 正常的读取数据即可, 读不到会返回空, 记得做判断. if not data: # 空值转布尔会转为 False, 取反后就是: True break # 5. 把上述读取到的数据, 写到目的地文件中. dst_f.write(data) # 6. 释放资源. src_f.close() dst_f.close()

3.4 with open语句

3.4.1 概述
'''with open语句概述: 格式: with open('路径', '模式', '码表') as 文件名, open(...) as 文件名 : 正常的读取操作的代码 特点: with..open()语句会在 它所管理的代码执行完毕后, 自动释放(open()打开的)资源. 本质: with后边写的内容是 上下文管理器对象, 这个目前了解, 就业班详解.'''
# 回顾: 拷贝文件的代码.# # 1. 创建文件对象, 关联: 数据源文件.# src_f = open('data/1.txt', 'r', encoding='utf-8')# # 2. 创建文件对象, 关联: 目的地文件.# dst_f = open('data/2.txt', 'w', encoding='utf-8')# # 3. 循环读取.# while True:# # 4. 具体的读取操作.# data = src_f.read(1024)# # 5. 判断读取到的数据是否为空, 为空就结束, 不为空就写入.# if not data:# break# dst_f.write(data)## # 6. 释放资源.# src_f.close()# dst_f.close()# 用 with.open 语句优化上述的代码.# 1. 创建文件对象, 关联: 数据源文件.# 2. 创建文件对象, 关联: 目的地文件.withopen('data/1.txt','r',encoding='utf-8')assrc_f,open('data/2.txt','w',encoding='utf-8')asdst_f:# 3. 循环读取.whileTrue:# 4. 具体的读取操作.data=src_f.read(1024)# 5. 判断读取到的数据是否为空, 为空就结束, 不为空就写入.ifnotdata:breakdst_f.write(data)

4 try-except语句

4.1 概述:

'''在Python中, 把程序出现的所有非正常情况称之为 异常(Exception), 俗称叫: Bug 异常的两种处理方式: 1. 我们不手动处理, 而是交给程序自动处理. 程序会: 将异常信息, 出现的原因, 位置打印到控制台上, 并终止程序的执行. 2. 我们手动处理, 处理之后, 程序会继续运行 -> 捕获异常. try.except语法.'''

4.2 try.except语法的完整格式

''' try: 里边写可能出问题的代码 except [异常类型 as 别名]: 出现问题后的解决方案 else: 如果程序没有出现问题, 就会执行这里的内容 finally: 无论程序是否有Bug, 都会执行这里的内容. '''

4.3 执行流程

''' 1. 先执行try中的内容, 看有无问题. 如果有问题: 会立即跳转到 except中进行执行. 如果无问题: 则try中内容执行完毕后, 会执行else中的内容. 2. 无论try中是否有问题, 都会执行finally中的内容. 图解: 出问题了, 走: except --- / \ try 无论try中是否有Bug, 最终肯定会走finally \ / 无问题, 走: else ----- 特点: 处理之后, 程序会继续往下执行. '''

4.4 猜数字案例

# 导包importrandom# todo 1.定义函数defguess_number_game():# 1. 生成1个随机数, 让用户来猜.guess_num=random.randint(1,100)# 2. 因为不知道用户多少次能猜对, 我们用: while循环.whileTrue:# 3. 判断本次猜数字是否有问题, 如果有问题, 就提示.try:# 4. 提示用户录入他/她要猜的数字, 并接受.input_num=int(input("请输入你要猜的数字: "))# 5. 判断用户输入的数字是否和随机数相等, 并提示.ifinput_num==guess_num:print("恭喜你, 猜对了!")breakelifinput_num>guess_num:print("你猜的数字太大了")else:print("你猜的数字太小了")except:print('哎呀, 录入有误, 请录入1 ~ 100之间的整数!')# main函数 = 程序的主入口, 所有的代码都是从这里开始执行的.if__name__=='__main__':# todo 2.调用函数guess_number_game()

4.5 完整案例

defdivision(a,b):"""除法函数,演示 try-except-else-finally 完整用法"""try:# 可能出错的代码:除法运算result=a/bprint(f"计算成功:{a}/{b}={result}")# 捕获【除零错误】(除数为0时触发)exceptZeroDivisionErrorase:print(f"出现异常:除数不能为 0!错误信息:{e}")# 捕获【类型错误】(传入非数字时触发)exceptTypeErrorase:print(f"出现异常:请输入数字!错误信息:{e}")# 【没有异常】才会执行else:print("🔹 else 执行:程序运行一切正常!")returnresult# 【无论是否异常】都会执行finally:print(" finally 执行:收尾工作(关闭文件/断开连接/清理资源)\n")# ------------------- 测试 1:正常情况 -------------------print("===== 测试 1:正常除法 10 / 2 =====")division(10,2)# ------------------- 测试 2:除零异常 -------------------print("===== 测试 2:除数为 0 10 / 0 =====")division(10,0)# ------------------- 测试 3:类型异常 -------------------print("===== 测试 3:传入字符串 10 / 'abc' =====")division(10,"abc")
http://www.jsqmd.com/news/626079/

相关文章:

  • 男士沐浴露红榜 | 选对沐浴露,洗澡秒变享受! - 品牌测评鉴赏家
  • CKKS 同态加密数学基础推导挂
  • 2026年4月上海制服定制品牌实力盘点:五家专业服务商深度解析 - 2026年企业推荐榜
  • Spring Boot Starter 自动配置流程
  • 3步终极优化:ACE-Guard资源限制器彻底解决腾讯游戏卡顿问题
  • Qwiic自动识别固件框架:多传感器即插即用解决方案
  • 基于51单片机的心率体温检测系统设计
  • 011、向量数据库入门:Embeddings原理与ChromaDB实战
  • 2026年当下,曲靖企业AI搜索获客的靠谱服务商选择:摘星AI云南公司深度剖析 - 2026年企业推荐榜
  • ASCIIGraph:嵌入式串口实时ASCII波形可视化库
  • uboot命令
  • 基于单片机的智能家居安防系统设计
  • 2026年4月昆明酒店业优选:天威热水集热工程的一站式太阳能热水解决方案 - 2026年企业推荐榜
  • 告别内存焦虑:用Starling在10GB磁盘上搞定3300万向量检索,延迟<1ms
  • 别再手动除草了!用Python+OpenCV部署一个田间杂草实时检测系统
  • Openclaw接入自动发文教程聊
  • 为什么需要“双侧极限存在且相等”?
  • 计算机毕业设计:Python空气质量大数据可视化与预测平台 Django框架 可视化 数据分析 Prophet时间序列 大数据 大模型 深度学习(建议收藏)✅
  • 告别盲目探测!为你的Rockchip设备定制专属的Uboot SPL启动流程
  • 2025年深度解析:南通大模型内容标注服务商的选型避坑指南 - 2026年企业推荐榜
  • 明明知道该做什么,却总提不起劲?蕙兰瑜伽告诉你:不是你懒,是你忘了自己是谁
  • Ubuntu系统中Xmind8的安装与Java环境配置指南(实测可行)
  • DFRobot INA219库详解:高精度电流电压功率监测驱动开发
  • 解决集群中DeepSpeed端口冲突的高效参数调整方案
  • 2026平凉铝单板厂家专业排行:嘉峪关铝单板、定西铝单板、平凉铝单板、格尔木铝单板、武威铝单板、河南铝单板、洛阳铝单板选择指南 - 优质品牌商家
  • 单亲宝爸带6岁“小魔王”累到崩溃,幸好有蕙兰瑜伽……
  • 树莓派5硬件PWM实战:告别软件抖动,实现精准控制
  • 保姆级教程:在TB-RK3588X开发板上,用rknn-toolkit2把YOLOv11n模型转成RKNN(附完整代码)
  • 2026年四月柔性生产线定制新趋势:专业服务商推荐 - 2026年企业推荐榜
  • 2026年现阶段苏州市姑苏区黄金K金回收服务商综合评估与选购指南 - 2026年企业推荐榜