第10章 文件和异常

第10章 文件和异常

  • 10.1 从文件中读取数据
    • 10.1.1 读取整个文件
    • 10.1.2 文件路径
    • 10.1.3 逐行读取
    • 10.1.4 创建一个包含文件各行内容的列表
    • 10.1.5 使用文件的内容
    • 10.1.6 包含一百万位的大型文件
    • 10.1.7 圆周率值中包含你的生日吗
  • 10.2 写入文件
    • 10.2.1 写入文件
    • 10.2.2 写入多行
    • 10.2.3 附加到文件
  • 10.3 异常
    • 10.3.1 处理 ZeroDivisionError 异常
    • 10.3.2 使用 try-except 代码块
    • 10.3.3 使用异常避免崩溃
    • 10.3.4 else 代码块
    • 10.3.5 处理 FileNotFoundError 异常
    • 10.3.6 分析文本
    • 10.3.7 使用多个文件
    • 10.3.8 静默失败
    • 10.3.8 决定报告哪些错误
  • 10.4 存储数据
    • 10.4.1 使用 json.dump()和 json.load()
    • 10.4.2 保存和读取用户生成的数据
    • 10.4.3 重构

在这里插入图片描述

10.1 从文件中读取数据

10.1.1 读取整个文件

要读取文件,需要一个包含几行文本的文件。

path ='E:/test.txt'
with open(path) as file:data = file.read()
print(data)

open 接受一个文件路径,返回一个表示文件的对象,并将该对象赋给file使用。方法read()会读取文件的全部内容。
输出时字符后面后多一个空行,可通过rstrip()删除字符后面的空白。

print(data.rstrip)

10.1.2 文件路径

将类似于 test.txt 的文件名传递给函数时,Python 将在当前执行的文件中查找。
绝对文件路径 ‘E:/test.txt’ 在计算机中的准确位置。
相对文件路径 ‘test.txt’ 在当前执行的文件(.py文件)所在的目录中查找。

10.1.3 逐行读取

要以每次一行的方式检查文件,可对文件对象使用 for 循环。

path ='E:/test.txt'
with open(path) as file:for line in file:print(line)

10.1.4 创建一个包含文件各行内容的列表

使用关键字 with 时,open()返回的文件对象只在 with 代码块内可用。如果要访问文件的内容,可在 with 代码块内将文件的各行存储在一个列表中。

path ='E:/test.txt'
with open(path) as file:lines = file.readlines()
for line in lines:print(line.rstrip())

10.1.5 使用文件的内容

将文件读取到内存中后,就能以任何方式使用这些数据了。

path ='E:/test.txt'
with open(path) as file:lines = file.readlines()
ss = ''
for line in lines:ss += line.rstrip()  # 将字符串连接起来 且没有空格
print(ss)

10.1.6 包含一百万位的大型文件

创建一个包含所有这些数字的字符串,将这个文件传递给它

10.1.7 圆周率值中包含你的生日吗

将生日表示为一个由数字组成的字符串,再检查这个字符串是否包含在中。

path ='E:/test.txt'
with open(path) as file:lines = file.readlines()
ss = ''
for line in lines:ss += line.rstrip()
print(ss)  # abcdefg
s = 'a'
if s in ss:print('包含')
else:print('不包含')

10.2 写入文件

10.2.1 写入文件

path ='E:/test.txt'
with open(path, 'w') as file:file.write('python')

调用open()时提供了两个实参,第一个实参是要打开的文件的名称。第二个实参’w’是写入模式。
第二个参数 ‘r’读取模式,‘w’写入模式,‘a’附加模式,‘r+’读写模式。默认只读‘r’。
如果写入的文件不存在,函数open()将自动创建它。如果以写入模式(‘w’)打开,指定的文件已经存在,python将在返回文件对象前清空该文件的内容。

10.2.2 写入多行

函数 write()不会在写入的文本末尾添加换行符,因此写入多行时需要指定换行符’\n’。

path ='E:/test.txt'
with open(path, 'w') as file:file.write('hello\n')file.write('python\n')

10.2.3 附加到文件

如果要给文件添加内容,而不是覆盖原有的内容,可以以附加模式’a’打开文件。

path ='E:/test.txt'
with open(path, 'a') as file:file.write('hello\n')file.write('python\n')

10.3 异常

10.3.1 处理 ZeroDivisionError 异常

不能用数除以 0。

print(5/0)

在这里插入图片描述

10.3.2 使用 try-except 代码块

当你认为可能会发生错误时,可编写一个 try-except 代码块来处理可能引发的异常。

try:print(5/0)
except ZeroDivisionError:print('不能除以0')

在这里插入图片描述

10.3.3 使用异常避免崩溃

发生错误时,如果程序还有工作尚未完成,妥善地处理错误就尤其重要。这种情况经常会出现在要求用户提供输入的程序中;如果程序能够妥善地处理无效输入,就能再提示用户提供有效输入,而不至于崩溃。

10.3.4 else 代码块

有一些仅在 try 代码块成功执行时才需要运行的代码,这些代码应放在 else 代码块中。

try:ans = 5/4
except ZeroDivisionError:print('不能除以0')
else:print(ans)

10.3.5 处理 FileNotFoundError 异常

找不到文件。查找的文件可能在其他地方,可使用 try-except 代码块以直观的方式处理。

try:path = 'F:/test.txt'with open(path) as file:data = file.read()
except FileNotFoundError:print('找不到文件')

10.3.6 分析文本

split()以空格为分隔符将字符串分拆成多个部分,并将这些部分存储到一个列表中。
我们将对整篇小说调用 split(),再计算得到的列表包含多少个元素,从而确定整篇文本中包含多少个单词。

try:path = 'E:/test.txt'with open(path) as file:data = file.read()
except FileNotFoundError:print('找不到文件')
else:words = data.split()print(len(words))  # 输出单词个数

10.3.7 使用多个文件

编写一个简单的循环,计算要分析的任何文本包含多少个单词。

10.3.8 静默失败

Python有一个 pass 语句,可用于让 Python 在代码块中什么都不要做。

10.3.8 决定报告哪些错误

凭借经验可判断该在程序的什么地方包含异常处理块,以及出现错误时该向用户提供多少相
关的信息。

10.4 存储数据

10.4.1 使用 json.dump()和 json.load()

这是一种在程序之间共享数据的简单方式。
json.dump()接受两个实参:要存储的数据,以及可用于存储数据的文件对象。
json.load()加载数据。

import jsonnums = [1, 2, 3, 4, 5]
path = 'E:/test.json'
with open(path, 'w') as f:json.dump(nums, f)  # 写入with open(path) as f:data = json.load(f)  # 读取
print(data)  # [1, 2, 3, 4, 5]

在这里插入图片描述

10.4.2 保存和读取用户生成的数据

使用 json 保存用户生成的数据

10.4.3 重构

重构让代码更清晰、更易于理解、更容易扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatisPlus基础学习

一、简介 二、集成MP 三、入门HelloWorld 四、条件构造器EntityWrapper 五、ActiveRecord(活动记录 ) 六、代码生成器 七、插件扩展 八、自定义全局操作 九、公共字段自动填充 十、Oracle主键Sequence 十一、Idea快速开发插件 十二、mybatis-plus实践及架构原理

C#聊天室客户端完整③

窗体 进入聊天室界面(panel里面,label,textbox,button): 聊天界面(flowLayoutPanel(聊天面板)): 文档大纲(panel设置顶层(登录界面),聊天界面在底层) 步骤:设置进入聊天室→输入聊天→右边自己发送的消息→左边别人发的消息 MyClient.cs(进入聊天室类) …

如何利用TikTok矩阵源码实现自动定时发布和高效多账号管理

在如今社交媒体的盛行下,TikTok已成为全球范围内最受欢迎的短视频平台之一。对于那些希望提高效率的内容创作者而言,手动发布和管理多个TikTok账号可能会是一项繁琐且耗时的任务。幸运的是,通过利用TikTok矩阵源码,我们可以实现自…

Linux C语言:字符串处理函数

一、字符串函数 1、C库中实现了很多字符串处理函数 #include <string.h> ① 求字符串长度的函数strlen② 字符串拷贝函数strcpy③ 字符串连接函数strcat④ 字符串比较函数strcmp 2、字符串长度函数strlen 格式&#xff1a;strlen(字符数组)功能&#xff1a;计算字符串…

【Python】已解决报错:AttributeError: module ‘json‘ has no attribute ‘loads‘解决办法

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

1)Java项目笔记搭建系统梳理相关知识

目录 前言项目结构Java部分Spring整合部分SpringBoot整合部分 模块说明规划 小结javarabbitmqmybatisspring最后推荐几本工具书 前言 工作有年头了&#xff0c;学到了很多技术&#xff0c;收获了很多。但是对与工作相关的专业技能知识的掌握杂而乱&#xff0c;不够全面系统。因…

Web应用安全测试-综合利用(一)

Web应用安全测试-综合利用&#xff08;一&#xff09; 文章目录 Web应用安全测试-综合利用&#xff08;一&#xff09;1.跨站脚本攻击&#xff08;XSS&#xff09;漏洞描述测试方法GET方式跨站脚本Post方式跨站脚本 风险分析风险等级修复方案总体修复方式对于java进行的web业务…

21.FuturePromise

在异步处理时,经常用到两个接口Future 和 Promise。 说明:Netty中的Future与jdk中的Future同名,但是是两个接口,netty的Future继承了jdk的Future,而Promise又对Netty的Future进行了扩展。 JDK的Future只能同步等待任务结束(成功、失败)才能得到结果。FutureTask.get()方…

ROS中使用超声波传感器(附代码)

在ROS中使用超声波传感器通常涉及到订阅或发布sensor_msgs/Range类型的消息。下面是一个简单的示例&#xff0c;展示了如何使用C在ROS中编写一个超声波传感器的驱动程序。这个例子假设你有一个超声波传感器连接到了Arduino或者其他微控制器&#xff0c;并且该微控制器已经通过串…

SpringBoot三层架构

目录 一、传统方式 二、三层架构 三、代码拆分 1、dao层 2、service层 3、control层 四、运行结果 一、传统方式 上述代码存在一定的弊端&#xff0c;在进行软件设计和软件开发中提倡单一责任原则&#xff0c;使代码的可读性更强&#xff0c;复杂性更低&#xff0c;可扩展性…

QT day03

思维导图 QT设计 升级优化自己应用程序的登录界面。 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确&#xff0c;则实现登录界面关闭&#xff0c;另一个应用界面…

HarmonyOS(37) APP crash崩溃日志收集插件@hw-agconnect使用指南

hw-agconnect使用指南 添加配置文件配置SDK依赖初始化SDK参考资料 添加配置文件 获取agconnect-services.json文件。将“agconnect-services.json”文件拷贝到DevEco Studio项目的“AppScope/resources/rawfile”目录下。 配置SDK依赖 在“oh-package.json5”文件的“depende…

【数据初步变现】论自助BI在数字化转型中如何赋能业务

引言&#xff1a;数字化转型要求企业更加依赖数据来指导业务决策。自助BI作为数据分析的重要工具&#xff0c;能够迅速、准确地从海量数据中提取有价值的信息&#xff0c;为企业的战略规划和业务执行提供有力支持。在数字化时代&#xff0c;企业需要快速响应市场变化并优化业务…

标准立项 | 膜曝气生物膜反应器(MABR)平板曝气膜

立项单位&#xff1a;天津市华宇膜技术有限公司、中国市政工程中南设计研究总院有限公司、中建生态环境集团有限公司、富朗世水务技术(江苏)有限公司、常州宣清环境科技有限公司 膜组件开发 膜腔内部支撑结构-一在膜腔内部设置支撑结构以防止膜腔在水压下压实&#xff0c;同时…

五、路由协议

目录 一、为何划分子网&#xff1f; 二、静态路由 三、OSPF 3.1、OSPF原理 3.1.1、ospf四步过程 3.2、OSPF区域划分 3.2.1、为什么划区域&#xff1f; 3.2.2、划分规则 3.3、OSPF参数 3.4、五种报文 3.4.1、hello报文 3.4.2、DD报文 3.4.2、LSR、LSU、LSAck报文 3…

“深入探讨Redis主从复制:原理、配置与优化“

目录 # 概念 1. 配置主从同步步骤 1.1 创建文件夹 1.2 复制配置文件 1.3 配置文件关闭 1.4 查看端口号&#xff0c;发现端口号存在 1.5 连接三个端口号 1.6 查看主机运行情况 1.7 让服务器变成&#xff08;主机&#xff09;或&#xff08;从机&#xff09; 1.8 实现效…

【达梦数据库】typeorm+node.js+达梦数据库返回自增列值

1.配置环境&#xff0c;下载依赖包 typeorm init --name test22 --database mysql typeorm-dm&#xff0c;uuid,typeorm2,修改连接信息 修改src/ data-source.ts 文件 连接dm&#xff0c;可参考刚刚安装typeorm-dm 模块中的 README.md 3.修改自增信息 /* 修改前*/PrimaryGen…

【数据结构与算法 刷题系列】判断链表是否有环(图文详解)

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法 经典例题》C语言 期待您的关注 ​ ​ 目录 一、问题描述 二、解题思路 1.解题思路: 2.快慢指针的移动分三个…

✅生产问题之Emoji表情如何操作存储,MySQL是否支持

针对 Emoji 表情 MySQL 存储是否支持的问题&#xff0c;结论是&#xff1a; MySQL 中可以存储 emoji 表情&#xff0c;但需要使用 UTF8MB4 字符编码。如果使用 UTF8MB3&#xff0c;存储这些扩展字符会导致解析错误。 课外补充 MySQL 对 Unicode 的支持 Unicode 字符集已成为…

6.17作业

升级优化自己应用程序的登录界面。 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确&#xff0c;则实现登录界面关闭&#xff0c;另一个应用界面显示。 //发送端头文件…