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

Python 文件操作指南:使用 open 和 with open 实现高效读写

🍀 前言

博客地址:

  • CSDN:https://blog.csdn.net/powerbiubiu

👋 简介

本系列文章主要分享文件操作,了解如何使用 Python 进行文件的读写操作,介绍常见文件格式的读取和写入方法,包括TXT、 CSV、JSON、XML 等,以及如何使用相应的 Python 库来处理这些文件格式,同时对数据进行持久化操作。本章节就从最常见的TXT文件开始。

📖 正文

1 open

文件准备

春眠不觉晓
处处闻啼鸟
迎来风雨声
花落知多少
1.1 读取文件内容
f = open('test.txt', 'r', encoding='utf-8')
res = f.read()
print(res)
f.close()#春眠不觉晓
#处处闻啼鸟
#迎来风雨声
#花落知多少

Tips:
读取文件的时候,这个文件必须存在,否则会抛异常

1.1 内容写入文件

在对文件写入内容的时候,若指定的文件不存在,则会自动创建

f = open('test1.txt', 'w', encoding='utf-8')
s = '春眠不觉晓\n处处闻啼鸟\n迎来风雨声\n花落知多少\n'
f.write(s)
f.close()

但是存在一个问题,如果在执行一次以上代码,文件中的内容被覆盖了,没有实现追加,如果需要实现对文件内容的追加,需要指定参数mode的值为a才能实现追加功能

f = open('test1.txt', mode='a', encoding='utf-8')
s = '春眠不觉晓\n处处闻啼鸟\n迎来风雨声\n花落知多少\n'
f.write(s)
f.close()
1.3 模式详解
mode含义
r只读的方式打开文件,文件指针在文件的开头
r+读写的方式打开文件,文件指针在文件的开头
w打开一个文件只用于写入,并从头开始编辑,原有内容会被删除
w+打开一个文件用于读写,并从头开始编辑,原有内容会被删除
a打开一个文件用于追加,文件指针在文件结尾
a+打开一个文件用于读写,文件指针在文件结尾

这里不涉及对二进制的操作,所以只列举文本操作使用的mode参数。

1.4 文件读写方法
  • f.read():一次性读取所有内容
  • f.readline():按行读取,一次读取一行内容
  • f.readlines():返回一个列表,列表中每个元素就是一行内容
  • f.readable():判断文件是否可读,可读返回True,否则返回False
  • f.write(s):将s写入文件
  • f.seek(0):将文件指针移到文件开头,可以在支持读写的情况下使用,先下如内容,然后将文件指针指向开头,在读取文件内容
1.5 上下文管理

使用方法和open一样,这种是通过上下文管理器的方式进行文件读写,在结束后,可以省略close操作,一搬正常情况下,可以使用with open进行操作
只读模式

with open('test.txt', 'r') as f:content = f.read()

只写模式

with open('test.txt', 'w') as f:f.write('Hello, World!')

追加模式

with open('test.txt', 'a') as f:f.write('append Hello, World!')

2 封装工具类

使用场景:假设需要对人的姓名,年龄,性别信息进行保存,通过txt文件进行存储。

import os.pathclass FileTools:def __init__(self, file: str, sp: str = ','):"""初始化:param file: 文件:param sp: 分割字符,默认逗号,"""if not os.path.exists(file):# 文件不存在,创建文件with open(file, 'w') as f:passself.file = fileself.sp = spdef read(self) -> list:"""读取所有内容,返回列表:return:"""with open(self.file, 'r+', encoding='utf-8') as f:content = f.readlines()return [i.strip().split(self.sp) for i in content]def append(self, *args) -> None:"""追加写入:param content::return:"""try:with open(self.file, 'a+', encoding='utf-8') as f:if len(args) == 1:f.write(args[0] + '\n')else:f.write(self.sp.join(args) + '\n')except TypeError as e:print(f"写入文件异常:{e}")if __name__ == '__main__':ft = FileTools('users.txt')ft.append('张三', '19', '男')ft.append('李四', '20', '女')print(ft.read())# [['张三', '19', '男'], ['李四', '20', '女']]

这里通过不定长参数args来接收需要写入的内容,通过初始化默认的,来进行拼接,所以当添加了两条数据后,文件中的内容如下:

张三,19,男
李四,20,女

然后读取的时候,同样通过默认的,进行分割处理,将结果通过列表嵌套列表返回

✏ 总结

with open文件操作,更多的是文件进行读与写的操作,并不支持更新删除功能,这需要通过读取所有内容,来筛选数据进行删除,更新,然后再将数据覆盖原文件,这种操作属于数据库增删改查功能。

💖 欢迎关注我的公众号

在这里插入图片描述

相关文章:

Python 文件操作指南:使用 open 和 with open 实现高效读写

🍀 前言 博客地址: CSDN:https://blog.csdn.net/powerbiubiu 👋 简介 本系列文章主要分享文件操作,了解如何使用 Python 进行文件的读写操作,介绍常见文件格式的读取和写入方法,包括TXT、 CS…...

FasterNet代码阅读

FasterNet 类参数初始化 将图像切分为非重叠的图像块 PatchEmbed 类 将图像分解为非重叠的图像块有以下几个好处: 1. 缩小计算量:对于大尺寸的图像,直接对整个图像进行处理可能会导致计算和内存消耗过大。将图像切分为小块可以降低计算量…...

Rust开源Web框架Salvo源码编译

1.克隆源码: https://github.com/salvo-rs/salvo.git 2.进入salve目录并运行cargo build编译 编译成功 3.编译生成的库 4.安装salve-cli git clone --recursive https://github.com/salvo-rs/salvo-cli.git 编译salve-cli...

基于Java+SpringBoot+Mybaties-plus+Vue+elememt + uniapp 新闻资讯 的设计与实现

一.项目介绍 本系统分为 后端 和 小程序端 后端:点击登录按钮 设置个人中心、 管理员账号数据维护、 基础数据维护、 短视频信息维护(包括查看短视频留言、短视频收藏)、 论坛维护(增删改查帖子信息,包括查…...

TCP—三次握手和四次挥手

目录 一、三次握手和四次挥手的目的 二、TCP可靠的方面 三、什么是三次握手 四、第三次握手的目的 五、什么是四次挥手 六、超时时间的目的 七、SYN包、ACK包、FIN包 八、解决丢包和乱序 九、参考资料 一、三次握手和四次挥手的目的 TCP三次握手的目的主要是为了确保两…...

基于UDP的网络聊天室

一.项目需求&#xff1a; 如果有用户登录&#xff0c;其他用户可以收到这个人的登录信息如果有人发送信息&#xff0c;其他用户可以收到这个人的群聊信息如果有人下线&#xff0c;其他用户可以收到这个人的下线信息服务器可以发送系统信息 二.服务器端 #include <myhead.h&…...

数组-两个升序数组中位数

一、题目描述 二、解题思路 (一).基本思想&#xff1a; 如果列表总长度allsize( arr1.size()arr2.size() ) 为奇数时&#xff0c;中位数位置应该在两个列表排序后的第 allsize/2 位置处&#xff0c;如果allsize为偶数&#xff0c;中位数应该取 (allsize/2)-1 和 allsize/2 的…...

每日一题《leetcode--116.填充每个结点的下一个右侧结点》

https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/ 题目要求给每个结点的next指针进行填充&#xff0c;使每个结点的next指针指向其下一个右侧结点。如果右侧没有结点&#xff0c;则将next指针设置为空。 struct Node* connect(struct Node* root) {…...

【MySQL精通之路】InnoDB(6)-磁盘结构(5)-Redolog

主博客&#xff1a; 【MySQL精通之路】InnoDB(6)-磁盘上的InnoDB结构-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】InnoDB-双写缓冲区-CSDN博客 下一篇: 目录 1.配置Redo Log容量&#xff08;MySQL 8.0.30或更高版本&#xff09; 2.配置重做日志容量&#xff08;MySQL…...

【探索自然语言处理:构建一个简单的文本分类器】

文章目录 前言文本预处理特征提取模型训练文本分类结论 前言 在信息时代&#xff0c;文本数据无处不在&#xff0c;从社交媒体帖子到客户反馈&#xff0c;文本是沟通和信息交流的主要媒介。自然语言处理&#xff08;NLP&#xff09;是人工智能的一个分支&#xff0c;它使计算机…...

概率论统计——大数定律

大数定律 弱大数定律&#xff08;辛钦大数定律&#xff09; 利用切比雪夫不等式&#xff0c;证明弱大数定律 应用 伯努利大数定理&#xff0c;&#xff08;辛钦大数定理的推论&#xff09; 证明伯努利大数定理 注意&#xff1a;这里将二项分布转化成0,1分布来表示&#xff0c;…...

vscode终端命令行前面出现两个conda环境名的问题决解方法

已经安装了conda&#xff0c;打开vscode的terminal时&#xff0c;命令行前面有两个虚拟环境名。 进入vscode的setting 找到Python->Python:Default Interpreter Path&#xff0c;把这个值复位&#xff0c;就可以解决。 如果不想前面带(base)&#xff0c;可以运行 conda co…...

“AI黏土人”一夜爆火,图像生成类应用应该如何长期留住用户?

文章目录 最近大火的“AI黏土人”&#xff0c;一股浓浓的《小羊肖恩》风。 凭借这这种搞怪的风格&#xff0c;“AI黏土人”等图像生成类应用凭借其创新技术和市场需求迅速崛起并获得巨大关注。然而&#xff0c;要保持用户黏性并确保长期发展&#xff0c;这些应用需要采取一系列…...

【MySQL精通之路】SQL优化(1)-查询优化(12)-块嵌套循环和批处理Key访问联接

在MySQL中&#xff0c;可以使用批处理Key访问&#xff08;BKA&#xff09;联接算法&#xff0c;该算法使用对联接表的索引访问和联接缓冲区。 BKA算法支持内联接、外联接和半联接操作&#xff0c;包括嵌套的外部联接。 BKA的优点包括由于更高效的表扫描而提高了联接性能。 此…...

SQL使用函数给多个分表添加同一字段

数据库中分表时&#xff0c;往往需要向多个分表中添加同一个字段&#xff0c;可以定义一个函数&#xff0c;每次调用这个函数向多个份表中添加同意字段。 1、创建函数示例&#xff1a; 在PostgreSQL中创建一个简单的函数 以下是一个在PostgreSQL中创建函数的简单示例&#x…...

OpenAI 再次刷新认知边界:GPT-4 颠覆语音助手市场,流畅度直逼真人互动?

前言 近日&#xff0c;美国人工智能研究公司 OpenAI 发布了其最新旗舰模型 GPT-4o&#xff0c;这一革命性的进展不仅标志着人工智能领域的新突破&#xff0c;更预示着即将步入一个全新的交互时代&#xff1f;GPT-4o 的发布&#xff0c;对于我们来说&#xff0c;意味着人工智能…...

UE5 使用外置摄像头进行拍照并保存到本地

连接外置摄像头功能&#xff1a;https://docs.unrealengine.com/4.27/zh-CN/WorkingWithMedia/IntegratingMedia/MediaFramework/HowTo/UsingWebCams/ 核心功能&#xff1a;UE4 相机拍照功能&#xff08;图片保存&#xff09;_ue 移动端保存图片-CSDN博客 思路是&#xff1a; …...

【C++】从零开始map与set的封装

送给大家一句话&#xff1a; 今日的事情&#xff0c;尽心、尽意、尽力去做了&#xff0c;无论成绩如何&#xff0c;都应该高高兴兴地上床恬睡。 – 三毛 《亲爱的三毛》 &#x1f303;&#x1f303;&#x1f303;&#x1f303;&#x1f303;&#x1f303;&#x1f303;&#x…...

Python可以声明并赋值一个hash类型变量吗?

在Python中&#xff0c;不能直接声明一个变量为hash类型&#xff0c;因为Python是一种动态类型语言&#xff0c;不需要&#xff08;也不能&#xff09;在声明变量时指定其类型。变量的类型是根据赋给它的值自动推断的。 将一个哈希值&#xff08;即一个整数&#xff09;赋值给…...

苗情灾情监控系统—提高农业生产效率

TH-MQ2苗情灾情监控系统是一种用于监测农作物生长状况和灾情的设备&#xff0c;通过实时监测和数据分析&#xff0c;帮助农民及时了解作物生长情况&#xff0c;采取相应的管理措施&#xff0c;提高农业生产效率和降低生产成本。 该系统通常由多种传感器、摄像头、数据传输模块等…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...