【Python 文件I/O】

Python 的文件 I/O 操作是数据处理的基础技能,涉及文件的读写、路径管理、异常处理等核心功能。以下是文件 I/O 的核心知识点:


一、基础文件操作

1. 打开文件
# 通用模式:r(读)/w(写)/a(追加) + b(二进制)/t(文本,默认)
f = open("data.txt", "r", encoding="utf-8")  # 文本模式读取
f = open("image.jpg", "rb")                  # 二进制模式读取
2. 关闭文件
f.close()  # 显式关闭(需确保执行)# 推荐方式:使用 with 语句自动关闭
with open("data.txt", "r") as f:content = f.read()
# 此时文件已自动关闭

二、文件读写模式

模式描述行为
r读取(默认)文件必须存在
w写入覆盖已存在文件,不存在则创建
a追加文件末尾写入,不存在则创建
r+读写文件必须存在
w+读写覆盖已存在文件,不存在则创建
b二进制模式与其他模式组合使用(如 rb

三、文件内容操作

1. 读取内容
with open("data.txt", "r") as f:# 读取全部内容full_text = f.read()# 逐行读取(生成器)for line in f:print(line.strip())# 读取指定大小chunk = f.read(1024)  # 读取1KB
2. 写入内容
with open("output.txt", "w") as f:f.write("Hello, World!\n")          # 写入字符串f.writelines(["Line1\n", "Line2\n"]) # 写入多行

四、文件路径处理

1. 路径操作
import os# 拼接路径(跨平台安全)
file_path = os.path.join("folder", "subfolder", "file.txt")# 获取绝对路径
abs_path = os.path.abspath("data.txt")# 检查文件存在性
if os.path.exists("data.txt"):print("文件存在")
2. 路径分解
path = "/user/docs/report.pdf"
print(os.path.basename(path))  # → "report.pdf"
print(os.path.dirname(path))   # → "/user/docs"

五、高级文件操作

1. 文件指针控制
with open("data.txt", "r+") as f:f.seek(10)      # 移动到第10字节f.write("X")    # 覆盖写入f.seek(0)       # 返回文件开头print(f.read())
2. 二进制文件处理
# 读取图片文件
with open("image.jpg", "rb") as f:img_data = f.read()# 写入二进制数据
with open("copy.jpg", "wb") as f:f.write(img_data)
3. 临时文件
import tempfilewith tempfile.NamedTemporaryFile(mode="w+t") as tmp:tmp.write("临时内容")tmp.seek(0)print(tmp.read())
# 临时文件自动删除

六、异常处理

try:with open("missing.txt", "r") as f:content = f.read()
except FileNotFoundError:print("文件不存在!")
except PermissionError:print("无访问权限!")
except IOError as e:print(f"I/O错误: {str(e)}")

七、实用技巧

1. 逐行处理大文件
with open("large_log.txt", "r") as f:for line in f:if "ERROR" in line:print(f"发现错误: {line.strip()}")
2. CSV 文件操作
import csv# 写入CSV
with open("data.csv", "w", newline='') as f:writer = csv.writer(f)writer.writerow(["Name", "Age"])writer.writerow(["Alice", 30])# 读取CSV
with open("data.csv", "r") as f:reader = csv.reader(f)for row in reader:print(row)
3. JSON 文件操作
import jsondata = {"name": "Bob", "age": 25}# 写入JSON
with open("data.json", "w") as f:json.dump(data, f, indent=2)# 读取JSON
with open("data.json", "r") as f:loaded_data = json.load(f)

八、性能优化

  1. 缓冲区控制

    # 增大缓冲区提升大文件读写性能
    with open("data.txt", "r", buffering=65536) as f:pass
    
  2. 内存映射文件

    import mmapwith open("large_file.bin", "r+b") as f:mm = mmap.mmap(f.fileno(), 0)mm[1024:1028] = b"TEST"  # 直接修改内存映射mm.close()
    

九、常见陷阱

  1. 文件未关闭

    # 错误示例:异常导致文件未关闭
    f = open("data.txt", "r")
    # ... 可能抛出异常的代码 ...
    f.close()  # 可能无法执行
    
  2. 路径分隔符

    # 错误示例:硬编码路径分隔符
    bad_path = "folder" + "\\" + "file.txt"  # Windows特定
    # 正确做法:使用os.path.join
    
  3. 编码问题

    # 错误示例:未指定编码导致乱码
    f = open("data.txt", "r")  # 使用系统默认编码
    # 正确做法:明确指定encoding参数
    

通过掌握这些内容,可以高效处理从简单文本读写到复杂二进制数据操作的各种场景。实际应用中需根据需求选择合适的模式和方法,并特别注意资源管理和异常处理。

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

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

相关文章

Twin Builder 中的电池等效电路模型仿真

电池单元热设计挑战 电池热管理的主要挑战之一是确保温度低于最大工作限值。较高的温度会导致效率降低、加速老化和潜在的安全隐患。工程师必须了解电池产生的热量,才能充分设计冷却系统。 了解和预测电池模块的热行为需要将电池的热损耗与电池单元的电气机械特性…

一种基于条件生成对抗网络(cGAN)的CT重建算法

简介 简介:该文提出了一种基于条件生成对抗网络(cGAN)的CT重建算法,通过引入CBAM注意力机制增强网络对关键特征的提取能力,有效解决了CT成像中因噪声干扰导致的重建精度下降问题。实验采用固体火箭发动机模拟件数据集,将正弦图分为五组并添加不同程度的噪声进行训练。结…

【Redis篇】linux 7.6安装单机Redis7.0(参数优化详解)

💫《博主主页》: 🔎 CSDN主页 🔎 IF Club社区主页 🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了…

【BUG】‘DetDataSample‘ object has no attribute ‘_gt_sem_seg‘

问题: 使用mmdetection框架使用COCO格式训练自定义数据集时,其中模型使用HTC模型时出现如下问题: AttributeError: ‘DetDataSample’ object has no attribute ‘_gt_sem_seg’. Did you mean: ‘gt_sem_seg’? results self(**data, mode…

Java日期格式化方法总结

在Java中,日期格式化主要涉及将 Date、LocalDate、LocalDateTime 等日期时间对象转换为指定格式的字符串,或将字符串解析为日期对象。以下是两种常用的日期格式化方式: 一、使用 SimpleDateFormat(旧版API,Java 8之前&…

【NLP】27. 语言模型训练以及模型选择:从预训练到下游任务

语言模型训练:从预训练到下游任务 本文详细讲解大型语言模型(LLMs)是如何训练的,包括不同的模型类型(Encoder、Decoder、Encoder-Decoder),以及各类预训练任务的原理、对比、适用场景&#xff0…

通过 ModernBERT 实现零样本分类的性能提升

文本分类 是机器学习中最基础的任务之一,拥有悠久的研究历史和深远的实用价值。更重要的是,它是许多实际项目中不可或缺的组成部分,从搜索引擎到生物医学研究都离不开它。文本分类方法被广泛应用于科学论文分类、用户工单分类、社交媒体情感分…

基于SpringBoot网上书店的设计与实现

pom.xml配置文件 1. 项目基本信息(没什么作用) <groupId>com.spring</groupId> <!--项目组织标识&#xff0c;通常对应包结构--> <artifactId>boot</artifactId> <!--项目唯一标识--> <version>0.0.1-SNAPSHOT</ve…

STM32H743单片机实现ADC+DMA多通道检测+事件组

在上个文章基础上改用事件组进行处理&#xff0c;以便实时任务。 stm32cubeMX自动生成代码 osEventFlagsId_t adctestEventHandle; const osEventFlagsAttr_t adctestEvent_attributes {.name "adctestEvent" };adctestEventHandle osEventFlagsNew(&adctest…

AI Agent开发第57课-AI用在销售归因分析场景中-用随机森林从0构建自己的“小模型”

开篇 在前一篇《机器学习的基础-线性回归如何应用在商业场景中》里,我们说到了如果我们只是简单的分析和预测一下投入广告费用和销售额增长是否存在必然关系,我们用了线性回归法得到了分析,得到的分析结果极其精准,以及提到了:如果当销售因素是非线性的并且有着额外一些如…

Linux运维——Vim技巧三

Vim技巧 一、按 按模 模式 式匹 匹配 配及 及按 按原 原义 义匹 匹配1.1、调整查找模式的大小写敏感性1.2、按正则表达式查找时&#xff0c;使用 \v 模式开关1.3、按原义查找文本时&#xff0c;使用 \V 原义开关1.4、使用圆括号捕获子匹配1.5、界定单词的边界1.6、界定匹配的边…

NLTK库(1): 数据集-语料库(Corpus)

1.简介 NLTK &#xff08;Natural Language Toolkit&#xff09; 是自然语言处理&#xff08;NLP&#xff09;任务的 Python 库&#xff0c;内置大量NLP数据集与计算包。 NLP数据集也叫语料库 (Corpus), 若无特殊格式或标记&#xff0c;数据集通常来自txt等文本文件。 本教程…

spring详解-循环依赖的解决

Spring循环依赖 重点提示&#xff1a; 本文都快写完了&#xff0c;发现“丈夫” 的英文是husband… 在“②有AOP循环依赖” 改过来了&#xff0c;前面用到的位置太多了就没改。我是说怎么idea的hansband英文下面怎么有波浪线。各位能够理解意思就行&#xff0c;英文拼写不要过…

随机快速排序算法

一、随机化原理 经典快速排序 选取固定的“枢轴”&#xff08;通常取第一个或最后一个元素&#xff09;&#xff0c;在最坏情况下&#xff08;如已经有序&#xff09;会退化为 。 随机快速排序 在每次分区前随机地从当前区间 [p..r] 中等概率选取一个枢轴&#xff0c;将它与末…

数据可视化与分析

数据可视化的目的是为了数据分析&#xff0c;而非仅仅是数据的图形化展示。 项目介绍 项目案例为电商双11美妆数据分析&#xff0c;分析品牌销售量、性价比等。 数据集包括更新日期、ID、title、品牌名、克数容量、价格、销售数量、评论数量、店名等信息。 1、数据初步了解…

美团Java高级配送员面经分享|玩梗版

美团Java高级配送员面经分享&#xff01;纯玩梗&#xff01;

在windows中卸载mysql

一、停止服务 winR快捷键 -->> 输入services.msc -->> 进入服务窗口关闭Mysql服务 二、卸载程序&#xff08;可选&#xff09; 如果是通过解压压缩包安装的则跳过这一步&#xff0c;如果是使用.msi文件驱动安装则需要卸载 控制面板 -->> 程序和功能 -->…

https://juejin.cn/editor/drafts/7262346366541070395

.Net Core从零学习搭建权限管理系统教程 推荐一组WPF自定义控件开源项目。 项目简介 这是基于WPF开发的&#xff0c;为开发人员提供了一组方便使用自定义组件&#xff0c;并提供了各种常用的示例。 包含组件&#xff1a;数据表格、属性列表、树形列表、选色器、单选框列表、…

三、网络管理

网络管理 一、IP地址 原理&#xff1a; 定义与作用&#xff1a;IP 地址是互联网协议地址&#xff0c;用于在网络中唯一标识一台设备。它如同现实生活中的家庭住址&#xff0c;确保数据能准确无误地从源设备传输到目标设备。地址分类&#xff1a;IP 地址分为 IPv4 和 IPv6 两种…

Auto.js 脚本:清理手机数据但保留账号

Auto.js 脚本&#xff1a;清理手机数据但保留账号 以下是一个使用 Auto.js 实现的脚本&#xff0c;它可以帮你清理手机数据&#xff08;类似恢复出厂设置&#xff09;&#xff0c;同时尽可能保留已登录的账号状态。请注意&#xff0c;这个脚本不能完全等同于真正的恢复出厂设置…