【python技巧】文本文件的读写操作
【python技巧】文本文件的读写操作
- 0. 背景
- 1. file库的文件操作
- 1.1 打开文件---file.open()
- 1.2 读取文件---file.read()
- 1.3 写入文件---file.write()
- 1.4 查找内容---file.seek()
- 2. re库的文本处理
- 参考资料
0. 背景
最近在写后端接口的时候,需要对.c
、.conf
等类型的文件进行读写操作,在这里整理一下学习收获。
1. file库的文件操作
file库是python中用于处理文件的读取、修改等操作,引入方式为
import file
1.1 打开文件—file.open()
使用open()
函数打开文件,语法为:
import file
f=open(file_name="xx.txt", mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
其中,file_name
为文件名,mode
为打开文件的模式,buffering
为缓冲区大小,encoding
为编码格式,errors
为错误处理方式,newline
为换行符,closefd
为关闭文件描述符,opener
为自定义开启方式。
比较常用的参数为:file_name
、mode
、encoding
。
-
file_name
是文件的绝对路径或者相对路径。 -
mode
的常用取值如下:
-
encoding
的常用取值如下:
目前常用的文本文件编码格式有:ASCII、GB2312、GBK、GB18030、BIG5、ISO-8859-1、UCS-2、UTF-16、UTF-8。
其中,ASCII通常为英文字符编码,GB2312、GBK、GB18030、BIG5为中文字符编码,ISO-8859-1为西欧字符编码,UCS-2、UTF-16、UTF-8为通用字符编码。
在实际编码过程中常用的是UTF-8
编码。
1.2 读取文件—file.read()
文件读取的方式有两种:一种是一次性读取所有内容,一种是按行读取。
假设有文件xx.txt
,内容如下:
第一行内容;
第二行内容,
第三行内容
第四行内容
……
- 一次性读取所有内容
import file
with open(file_name="xx.txt", mode='r') as f:content=f.read()#从头到尾进行文件读取
print(content)#打印整个文件内容
输入效果类似于:
第一行内容;第二行内容,第三行内容第四行内容……
read()
还可以传入数字,形成read(n)
,表示读取n个字符。
- 按行读取
按行读取有两个函数:readline()
和readlines()
。
其中,readline()
是每次读取一行文件内容,readlines()
是将文件内容按行读取到一个列表中。
readline()
的使用方法如下:
import file
content_line="读取内容:\n"#设置起始内容
with open(file_name="xx.txt", mode='r') as f:while content_line:##当读取内容不为空的时候print(content_line)#打印整个文件内容content_line=f.readline()#逐行读取文件内容
输入效果类似于:
第一行内容;
第二行内容,
第三行内容
第四行内容
……
readlines()
的使用方法如下:
import file
with open(file_name="xx.txt", mode='r') as f:content=f.readlines()#读取全部文件内容,按行分割,形成列表
print(content)#打印整个文件内容,是一个列表格式
输入效果类似于:
[第一行内容;
第二行内容,
第三行内容
第四行内容
……]
1.3 写入文件—file.write()
文件写入的方式有两种:一种是一次性写入所有内容,一种是按行写入。
- 一次性写入所有内容
import file
content="待写入内容,可以很长"#设置写入内容
with open(file_name="xx.txt", mode='w') as f:f.write(content)#写入文件,这是使用的是覆盖写入
- 按行写入
按行写入函数为writelines()
,将列表中的内容按行写入文件。
writelines()
的使用方法如下:
import file
content=["写入内容1\n","写入内容2\n","写入内容3\n"]#设置写入内容
with open(file_name="xx.txt", mode='w') as f:f.writelines(content)#写入文件
此时,文件内容为:
写入内容1
写入内容2
写入内容3
需要注意的是,如果列表content中的元素没有添加换行符,writelines()
不会自动添加换行符,因此可能会出现多行内容写入到一行的情况。
因此,如果需要换行,需要在列表中的元素中添加换行符。
1.4 查找内容—file.seek()
tell()
函数用于判断文件指针当前所处的位置
使用方式如下:
import file
with open(file_name="xx.txt", mode='r') as f:print(f.tell())f.read(1024)print(f.tell())
输出结果为:
0
1024
而seek()
函数用于移动文件指针到文件的指定位置。
常见的使用方式如下:
import file
with open(file_name="xx.txt", mode='r') as f:print(f.tell())#输出:0f.read(1024)print(f.tell())#输出:1024f.seek(203)#从文件头开始,移动到第203个字符处print(f.tell())#输出:203
在这里介绍一下seek函数的参数:
seek(offset, whence)
# offset:必需参数,偏移量,相对于某一个基点的字符移动距离,正数表示按照文件流方向向后移动,负数表示逆着文件流方向向前移动
# whence:可选参数,可设置基点位置,0表示文件头(默认情况下),1表示当前位置,2表示文件尾
2. re库的文本处理
当然,在Python中,还有一个专门用于文本处理的库,那就是re
库。
我们读取文件内容,肯定不是单纯为了输出或者重新写入,对于文本我们一定有一些查找、定位的需求。
在python中,使用正则表达式能应付大多数情况下的数据处理需要,这就需要用到re
库,因此,我会在后续的更新中跟进正则表达式和re
库的相关知识,敬请期待。
参考资料
- Python3 File(文件) 方法
- Python文件基本操作整理
- Python 文件处理–详细整理
- Unicode,ASCII,UTF-8的区别
- Python seek()和tell()函数详解
相关文章:

【python技巧】文本文件的读写操作
【python技巧】文本文件的读写操作 0. 背景1. file库的文件操作1.1 打开文件---file.open()1.2 读取文件---file.read()1.3 写入文件---file.write()1.4 查找内容---file.seek() 2. re库的文本处理参考资料 0. 背景 最近在写后端接口的时候,需要对.c、.conf等类型的…...

SpringBoot项目(验证码整合)——springboot整合email springboot整合阿里云短信服务
目录 引出springboot整合email配置邮箱导入依赖application.yml配置email业务类测试类 springboot整合阿里云短信服务申请阿里云短信服务测试短信服务获取阿里云的accessKeyspringboot整合阿里云短信导包工具类 总结 引出 1.springboot整合email,qq邮箱,…...

缓存穿透,击穿,雪崩之间的区别与联系
1、缓存数据基本流程 通常来说,我们是从数据库将数据查询出来之后,如果数据不为空,则将数据存储在缓存中,下次查询时就直接从缓存查询了,只有查询不到才会从数据库查询。 2、缓存穿透 核心在穿透两个字,穿透了,就说明在查询数据时没有遇到阻碍,直接就查询到了数据库。…...

Vue项目npm run dev 启动报错TypeError: Cannot read property ‘upgrade‘ of undefined
vue项目启动报错 TypeError: Cannot read property upgrade of undefined 由于我的vue.config.js文件 里面的代理target为空导致的 修改: 结果就可以正常运行了 参考原文: vue项目运行时报Cannot read property ‘upgrade’ of undefined错误_cannot r…...
dji uav建图导航系列(二)导航
文章目录 1、导航节点launch文件1.1、节点参数1.2、模拟器节点1.3、无人机雷达-底盘节点1.4、地图服务器节点1.5、AMCL节点1.6、move_base节点1.7、rviz可视化节点2、导航测试2.1、导航实测2.2、动态参数配置 rqt_reconfigure1、导航节点launch文件 导航节点启动文件 uav_navi…...

24.Netty源码之合理管理堆内存
highlight: arduino-light 合理管理 Netty 堆外内存 内存使用目标 •内存占用少(空间) •应用速度快(时间) 即多快好省 对 Java 而言:减少 Full GC 的 STW(Stop the world)时间 内存使用技巧 • 减少对象本身大小 md 例 1:用基本类型就不要用包装类。 例…...

如何自学(黑客)网络安全
前言: 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“…...

【vue】vue基础知识
1、插值表达式&属性绑定 <!--template展示给用户,相当于MVVM模式中的V--> <template><div class"first_div">//插值表达式<p>{{ message }}</p>//这里的参数是从父组件的template里传过来的<p>{{data_1}}</p…...
第一百一十一回 如何实现屏幕适配
文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了动画相关的内容,本章回中将介绍 如何适配屏幕.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们平常使用的手机屏幕大小不同,App运行在这些大小不同的屏幕上时效果却相同&…...

免费实用的日记应用:Day One for Mac中文版
Day One for Mac是一款运行在Mac平台上的日记软件,你可以使用Day One for mac通过快速菜单栏条目、提醒系统和鼓舞人心的信息来编写更多内容,day one mac版还支持Dropbox同步功能,想要day one mac中文免费版的朋友赶紧来试试吧! …...

HCIP的BGP基础实验
一、实验需求 除R5的5.5.5.0环回外,其他所有的环回均可互相一访问。 二、实验步骤 1.配置ip 2.建立邻居关系 2.1 R1和R2建立直连的EBGP邻居关系 [r1]bgp 1 [r1-bgp]router-id 1.1.1.1 [r1-bgp]peer 12.1.1.2 as-number 2 要建的话双方都要建下面配置R2 [r2]bgp…...
centos7编译安装升级python3.11
编译安装python3.11 准备步骤解压编译替换升级 准备步骤 yum -y install gcc zlib zlib-devel libffi libffi-devel bzip2-devel yum -y install openssl-devel openssl11 openssl11-devel yum -y install readline-devel解压编译 wget https://www.python.org/ftp/python/3.…...

win10安装mysql和c++读取调用举例
一、下载mysql8.rar解压到C盘(也可以解压到其他位置) 在系统环境变量添加JAVA_HOMEC:\myslq8,并在path中添加%JAVA_HOME%\bin; 二、以管理员身份进入命令窗口 三、修改配置文件指定安装路径和数据库的存放路径 四、键入如下命令初始化并启动mysql服务,然后修改登录…...

计算机竞赛 opencv python 深度学习垃圾图像分类系统
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 opencv python 深度学习垃圾分类系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 这是一个较为新颖的竞…...

通讯协议037——全网独有的OPC HDA知识一之聚合(六)实际时间最小值
本文简单介绍OPC HDA规范的基本概念,更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化,以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…...

【Freertos基础入门】freertos任务的优先级
文章目录 前言一、任务优先级1.Tick2.修改任务优先级 总结 前言 本系列基于stm32系列单片机来使用freerots 任务管理是实时操作系统(RTOS)的核心功能之一,它允许开发者以并发的方式组织和管理多个任务。FreeRTOS 是一个流行的开源RTOS&…...

【报错】ModuleNotFoundError: No module named ‘websocket‘
1 报错 ModuleNotFoundError: No module named websocket 2 解决方法 pip install websocket 1 报错 AttributeError: module websocket has no attribute enableTrace 2 分析 一般是由于websocket的依赖包没有安装造成的。websocket.enableTrace()方法是在websocket-cli…...

[Leetcode] [Tutorial] 多维动态规划
文章目录 62. 不同路径Solution 62. 不同路径 一个机器人位于一个 m ∗ * ∗ n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。 问总共有多少条不同的路径? 示例…...

C语言 二级指针和多级指针
什么是二级指针? 假设: int a 10;int * p &a;如上,p是指针变量,寄存的是a的地址,指向的是元素a 那么,指针变量p有地址吗?指针变量p的指针指向的是? int * * pp &p; …...

新机器到了要做的事情
文章目录 新机器到了要做的事情背景检查机器安装系统装系统步骤 总结 新机器到了要做的事情 背景 运维 一台机器到了,去看看机器情况,小编之前是开发呀,由于种种原因,阴差阳错的做了运维,本以为是应用运维,…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...