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

【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_namemodeencoding

  • 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库的相关知识,敬请期待。

参考资料

  1. Python3 File(文件) 方法
  2. Python文件基本操作整理
  3. Python 文件处理–详细整理
  4. Unicode,ASCII,UTF-8的区别
  5. 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展示给用户&#xff0c;相当于MVVM模式中的V--> <template><div class"first_div">//插值表达式<p>{{ message }}</p>//这里的参数是从父组件的template里传过来的<p>{{data_1}}</p…...

第一百一十一回 如何实现屏幕适配

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了动画相关的内容&#xff0c;本章回中将介绍 如何适配屏幕.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们平常使用的手机屏幕大小不同&#xff0c;App运行在这些大小不同的屏幕上时效果却相同&…...

免费实用的日记应用:Day One for Mac中文版

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

HCIP的BGP基础实验

一、实验需求 除R5的5.5.5.0环回外&#xff0c;其他所有的环回均可互相一访问。 二、实验步骤 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&#xff0c;并在path中添加%JAVA_HOME%\bin; 二、以管理员身份进入命令窗口 三、修改配置文件指定安装路径和数据库的存放路径 四、键入如下命令初始化并启动mysql服务,然后修改登录…...

计算机竞赛 opencv python 深度学习垃圾图像分类系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; opencv python 深度学习垃圾分类系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 这是一个较为新颖的竞…...

通讯协议037——全网独有的OPC HDA知识一之聚合(六)实际时间最小值

本文简单介绍OPC HDA规范的基本概念&#xff0c;更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化&#xff0c;以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…...

【Freertos基础入门】freertos任务的优先级

文章目录 前言一、任务优先级1.Tick2.修改任务优先级 总结 前言 本系列基于stm32系列单片机来使用freerots 任务管理是实时操作系统&#xff08;RTOS&#xff09;的核心功能之一&#xff0c;它允许开发者以并发的方式组织和管理多个任务。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 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。 问总共有多少条不同的路径&#xff1f; 示例…...

C语言 二级指针和多级指针

什么是二级指针&#xff1f; 假设&#xff1a; int a 10;int * p &a;如上&#xff0c;p是指针变量&#xff0c;寄存的是a的地址&#xff0c;指向的是元素a 那么&#xff0c;指针变量p有地址吗&#xff1f;指针变量p的指针指向的是&#xff1f; int * * pp &p; …...

新机器到了要做的事情

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

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...