当前位置: 首页 > 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;提高农业生产效率和降低生产成本。 该系统通常由多种传感器、摄像头、数据传输模块等…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...