python学习笔记七(文件)
文章目录
- Python 文件操作与异常处理全面指南
- 一、文件基本知识
- 1. 文件类型
- 2. 文件操作基本步骤
- 二、文件操作
- 1. 打开文件
- 2. 读取文件内容
- 3. 写入文件
- 4. 关闭文件
- 5. 使用with语句(推荐)
- 三、CSV文件操作
- 1. 使用csv模块
- 2. 读取CSV文件
- 3. 写入CSV文件
- 四、异常与异常处理
- 1. 常见文件操作异常
- 2. 异常处理基本语法
- 3. 抛出异常
- 五、文件与异常应用实例
- 1. 文件备份工具
- 2. CSV数据分析
- 3. 日志记录器
- 4. 配置文件读取
- 六、最佳实践
Python 文件操作与异常处理全面指南
一、文件基本知识
1. 文件类型
- 文本文件:以字符形式存储,如.txt, .py, .csv等
- 二进制文件:以字节形式存储,如图片、音频、视频等
2. 文件操作基本步骤
- 打开文件
- 读取/写入内容
- 关闭文件
二、文件操作
1. 打开文件
使用open()
函数:
file = open('filename.txt', 'mode', encoding='utf-8')
常用模式:
'r'
:只读(默认)'w'
:写入,会覆盖已有文件'a'
:追加,在文件末尾添加'x'
:创建新文件并写入'b'
:二进制模式,如'rb'
或'wb'
'+'
:读写模式,如'r+'
或'w+'
2. 读取文件内容
# 读取整个文件
content = file.read()# 读取一行
line = file.readline()# 读取所有行,返回列表
lines = file.readlines()# 逐行读取(推荐方式)
for line in file:print(line.strip()) # strip()去除首尾空白字符
3. 写入文件
# 写入字符串
file.write("Hello, World!\n")# 写入多行
lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
file.writelines(lines)
4. 关闭文件
file.close()
5. 使用with语句(推荐)
with open('filename.txt', 'r') as file:content = file.read()# 不需要手动关闭,with块结束后自动关闭
Python之with语句
三、CSV文件操作
1. 使用csv模块
import csv
2. 读取CSV文件
with open('data.csv', 'r') as csvfile:reader = csv.reader(csvfile)for row in reader:print(row) # 每行是一个列表
使用DictReader获取字典形式数据:
with open('data.csv', 'r') as csvfile:reader = csv.DictReader(csvfile)for row in reader:print(row['column_name']) # 通过列名访问数据
3. 写入CSV文件
data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]with open('output.csv', 'w', newline='') as csvfile:writer = csv.writer(csvfile)writer.writerows(data)
使用DictWriter写入字典形式数据:
fieldnames = ['Name', 'Age']
data = [{'Name': 'Alice', 'Age': 25}, {'Name': 'Bob', 'Age': 30}]with open('output.csv', 'w', newline='') as csvfile:writer = csv.DictWriter(csvfile, fieldnames=fieldnames)writer.writeheader() # 写入表头writer.writerows(data)
四、异常与异常处理
1. 常见文件操作异常
FileNotFoundError
:文件不存在PermissionError
:没有权限访问文件IOError
:输入输出错误UnicodeDecodeError
:编码错误
2. 异常处理基本语法
try:# 可能引发异常的代码with open('nonexistent.txt', 'r') as file:content = file.read()
except FileNotFoundError:# 处理特定异常print("文件不存在!")
except Exception as e:# 处理其他异常print(f"发生错误: {e}")
else:# 没有异常时执行print("文件读取成功!")
finally:# 无论是否发生异常都会执行print("操作结束")
3. 抛出异常
if not file_exists:raise FileNotFoundError("指定的文件不存在")
五、文件与异常应用实例
1. 文件备份工具
def backup_file(source, dest):try:with open(source, 'r') as src, open(dest, 'w') as dst:dst.write(src.read())print(f"文件 {source} 已成功备份到 {dest}")except FileNotFoundError:print("源文件不存在!")except PermissionError:print("没有足够的权限!")except Exception as e:print(f"备份过程中发生错误: {e}")backup_file('important.txt', 'important_backup.txt')
2. CSV数据分析
def analyze_csv(filename):try:with open(filename, 'r') as csvfile:reader = csv.DictReader(csvfile)total = 0count = 0for row in reader:try:total += float(row['Salary'])count += 1except (ValueError, KeyError):continueif count > 0:print(f"平均工资: {total/count:.2f}")else:print("没有有效数据")except FileNotFoundError:print("CSV文件不存在!")except Exception as e:print(f"分析过程中发生错误: {e}")analyze_csv('employees.csv')
3. 日志记录器
def log_message(message, logfile='app.log'):try:with open(logfile, 'a') as f:timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')f.write(f"[{timestamp}] {message}\n")except IOError as e:print(f"无法写入日志: {e}")log_message("程序启动")
log_message("处理数据...")
log_message("程序结束")
4. 配置文件读取
def read_config(config_file='config.ini'):config = {}try:with open(config_file, 'r') as f:for line in f:line = line.strip()if line and not line.startswith('#'):try:key, value = line.split('=', 1)config[key.strip()] = value.strip()except ValueError:continuereturn configexcept FileNotFoundError:print(f"警告: 配置文件 {config_file} 不存在,使用默认配置")return {}except Exception as e:print(f"读取配置文件时出错: {e}")return {}settings = read_config()
六、最佳实践
- 总是使用with语句:确保文件正确关闭
- 处理异常:预料可能发生的错误并提供有意义的反馈
- 指定编码:特别是处理非ASCII字符时
- 检查文件存在性:在写入前检查目录是否存在
- 大文件处理:对于大文件,使用逐行读取而非全部读取
- 资源清理:确保在程序退出前释放所有文件资源
通过掌握这些文件操作和异常处理技术,你可以构建更健壮、更可靠的Python应用程序。
未完待续……
相关文章:
python学习笔记七(文件)
文章目录 Python 文件操作与异常处理全面指南一、文件基本知识1. 文件类型2. 文件操作基本步骤 二、文件操作1. 打开文件2. 读取文件内容3. 写入文件4. 关闭文件5. 使用with语句(推荐) 三、CSV文件操作1. 使用csv模块2. 读取CSV文件3. 写入CSV文件 四、异…...

WebGL 开发的前沿探索:开启 3D 网页的新时代
你是否曾好奇,为何如今网页上能呈现出如同游戏般逼真的 3D 场景?这一切都要归功于 WebGL。它看似神秘,却悄然改变着我们浏览网页的体验。以往,网页内容大多局限于二维平面,可 WebGL 打破了这一限制。它究竟凭借什么&am…...
高防服务器部署实战:从IP隐匿到协议混淆
1. IP隐匿方案设计 传统高防服务器常因源站IP暴露遭针对性攻击,群联通过三层架构实现深度隐藏: 流量入口层:域名解析至动态CNAME节点(如ai-protect.example.com)。智能调度层:AI模型分配清洗节点…...

激光雷达定位算法在FPGA中的实现——section3 Matlab实现和校验
1、校验section2的计算方法是否正确 以section1里面的图示 举个例子: 1.1 手动计算...

AI+可视化:数据呈现的未来形态
当AI生成的图表开始自动“美化”数据,当动态可视化报告能像人类一样“讲故事”,当你的眼球运动直接决定数据呈现方式——数据可视化的未来形态,正在撕裂传统认知。某车企用AI生成的3D可视化方案,让设计师集体失业;某医…...

[免费]微信小程序医院预约挂号管理系统(uni-app+SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序医院预约挂号管理系统(uni-appSpringBoot后端Vue管理端),分享下哈。 项目视频演示 【免费】微信小程序医院预约挂号管理系统(uni-appSpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩…...

【网络入侵检测】基于源码分析Suricata的IP分片重组
【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全,欢迎关注与评论。 目录 目录 1.概要 2. 配置信息 2.1 名词介绍 2.2 defrag 配置 3. 代码实现 3.1 配置解析 3.1.1 defrag配置 3.1.2 主机系统策略 3.2 分片重组模块 3.2.1…...
Spring框架请求注解
Spring框架请求注解 1.RequestParam 作用:从请求的 查询参数(Query Parameters) 或 表单数据(Form Data) 中提取参数。适用场景: GET 请求的 URL 参数(如 /users?nameTom&age20ÿ…...

LVGL简易计算器实战
文章目录 📁 文件结构建议🔹 eval.h 表达式求值头文件🔹 eval.c 表达式求值实现文件(带详细注释)🔹 ui.h 界面头文件🔹 ui.c 界面实现文件🔹 main.c 主函数入口✅ 总结 项目效果&…...
【FMMT】基于模糊多模态变压器模型的个性化情感分析
遇到很难的文献看不懂,不应该感到气馁,应该激动,因为外审估计也看不太懂,那么学明白了可以吓唬他 缺陷一:输入依赖性与上下文建模不足 缺陷描述: 传统自注意力机制缺乏因果关系,难以捕捉序列历史背景多模态数据间的复杂依赖关系未被充分建模CNN/RNN类模型在…...
聊一聊接口测试依赖第三方服务变更时如何处理?
目录 一、依赖隔离与模拟 二、契约测试 三、版本控制与兼容性 四、变更监控与告警 五、容错设计 六、自动化测试维护 七、协作机制与文档自动化 第三方API突然改了参数或者返回结构,导致我们的测试用例失败,这时候该怎么办呢?首先想到…...

代码随想录算法训练营第60期第三十四天打卡
大家好,我们今天的内容依旧是贪心算法,我们上次的题目主要是围绕多维问题,那种时候我们需要分开讨论,不要一起并发进行很容易顾此失彼,那么我们今天的问题主要是重叠区间问题,又是一种全新的贪心算法思想&a…...
Midscene.js Chrome 插件实战:基于 AI 驱动 WEB UI 自动化测试「喂饭教程」
Midscene.js Chrome 插件实战:基于 AI 驱动 WEB UI 自动化测试「喂饭教程」 前言一、Midscene.js 简介二、环境准备与插件安装1. 安装 Chrome 插件2. 配置模型与 API Key三、插件界面与功能总览四、实战演练:用自然语言驱动网页自动化1. 典型场景一(Action):账号登录步骤一…...
JVM——方法内联之去虚化
引入 在Java虚拟机的即时编译体系中,方法内联是提升性能的核心手段,但面对虚方法调用(invokevirtual/invokeinterface)时,即时编译器无法直接内联,必须先进行去虚化(Devirtualizationÿ…...
Objective-C Block 底层原理深度解析
Objective-C Block 底层原理深度解析 1. Block 是什么? 1.1 Block 的本质 Block 是 Objective-C 中的特殊对象,实现了匿名函数的功能 通过 isa 指针继承自 NSObject,可以响应(如 copy、retain、release)等内存管理方…...

关于IDE的相关知识之二【插件推荐】
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于ide插件推荐的相关内容!…...
Python+Streamlit实现登录页
PythonStreamlit实现登录页 Streamlit 是一个开源的 Python 库,专为数据科学家和机器学习工程师设计,用于快速构建交互式 Web 应用。 其核心功能与特点包括: 1.快速原型开发 2.交互式数据展示 3.极简开发 4.实时更新 5.内置组件 6.无前端依赖…...
RDD案例数据清洗
在 Spark 中,RDD(Resilient Distributed Dataset)是分布式数据集的基本抽象。数据清洗是数据预处理中的一个重要步骤,通常包括去除重复数据、过滤无效数据、转换数据格式等操作。以下是一个使用 RDD 进行数据清洗的完整示例。 示…...
按键精灵ios脚本新增元素功能助力辅助工具开发(三)
元素节点功能(iOSElement) 在按键精灵 iOS 新版 APP v2.2.0 中,新增了元素节点功能 iOSElement,该功能包含共 15 个函数。这一功能的出现,为开发者在处理 iOS 应用界面元素时提供了更为精准和高效的方式。通过这些函…...

Axure RP9:列表新增
文章目录 列表新增思路新增按钮操作说明保存新增交互设置列表新增 思路 利用中继器新增行实现列表新增功能 新增按钮操作说明 工具栏中添加新增图标及标签,在图标标签基础上添加热区;对热区添加鼠标单击时交互事件,同步插入如下动作:显示/隐藏动作,设置目标元件为新增窗…...

06 mysql之DML
一、什么是DML DML 用于操作数据库中的数据。主要命令包括: INSERT:添加数据SELECT:查询数据UPDATE:修改数据DELETE:删除数据 二、插入数据(INSERT) 2.1 插入单条记录 -- 插入学生记录&…...
游戏引擎学习第277天:稀疏实体系统
回顾并为今天定下基调 上次我们结束的时候,基本上已经控制住了跳跃的部分,达到了我想要的效果,现在我们主要是在等待一些新的艺术资源。因此,等新艺术资源到位后,我们可能会重新处理跳跃的部分,因为现在的…...

【最新版】likeshop连锁点餐系统-PHP版+uniapp前端全开源
一.系统介绍 likeshop外卖点餐系统适用于茶饮类的外卖点餐场景,搭建自己的一点点、奈雪、喜茶点餐系统。 系统基于总部多门店的连锁模式,拥有门店独立管理后台,支持总部定价和门店定价LBS定位点餐,可堂食可外卖。无论运营还是二开…...
机器学习之决策树模型:从基础概念到条件类型详解
机器学习之决策树模型:从基础概念到条件类型详解 摘要:本文深入探讨决策树模型的概念、构成以及不同条件类型。首先介绍决策树的基本结构和工作原理,随后详细阐述轴心对齐条件与倾斜条件、二元条件与非二元条件的差异及应用场景,…...
网络编程(一)网络编程入门
本节课学习TCP客户端和服务器端编程架构,其分为分为C/S(客户端/服务器模式)和B/S(浏览器/服务器架构模式)两种模式。接下来我们分别了解这两种模式 C/S模式 C/S模式:服务器首先先启动,并根据客…...
黑名单中的随机数-leetcode710
题目描述 给定一个整数 n 和一个 无重复 黑名单整数数组 blacklist 。设计一种算法,从 [0, n - 1] 范围内的任意整数中选取一个 未加入 黑名单 blacklist 的整数。任何在上述范围内且不在黑名单 blacklist 中的整数都应该有 同等的可能性 被返回。 优化你的算法&am…...

纯Java实现反向传播算法:零依赖神经网络实战
在深度学习框架泛滥的今天,理解算法底层实现变得愈发重要。反向传播(Backpropagation)作为神经网络训练的基石算法,其实现往往被各种框架封装。本文将突破常规,仅用Java标准库实现完整BP算法,帮助开发者: 1) 深入理解BP数学原理。2) 掌握面向对象的神经网络实现。3) 构建可…...

海纳思(Hi3798MV300)机顶盒遇到海思摄像头
海纳思机顶盒遇到海思摄像头,正好家里有个海思Hi3516的摄像头模组开发板,结合机顶盒来做个录像。 准备工作 海纳斯机顶盒摄像机模组两根网线、两个电源、路由器一块64G固态硬盘 摄像机模组和机顶盒都接入路由器的LAN口,确保网络正常通信。 …...
MCP项目实例 - client sever交互
1. 项目概述 项目目标 构建一个本地智能舆论分析系统。 利用自然语言处理和多工具协作,实现用户查询意图的自动理解。 进行新闻检索、情绪分析、结构化输出和邮件推送。 系统流程 用户查询:用户输入查询请求。 提取关键词:从用户查询中…...

Axure应用交互设计:表格跟随菜单移动效果(超长表单)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!本文如有帮助请订阅 Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:表格跟随菜单移动 主要内容:表格交互设计、动态面板嵌套、拖动时事件、移动动作 应用场景…...