【python技巧】文本文件的读写操作

news2024/10/3 4:39:12

【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())#输出:0
    f.read(1024)
    print(f.tell())#输出:1024
    f.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()函数详解

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

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

相关文章

腾讯云服务器配置升级方法_CPU内存带宽存储扩大流程

腾讯云服务器CPU、内存、硬盘和公网带宽都可以升级或降低配置,在云服务器控制台的“资源调整”中即可操作,调整配置用于升级或降级CPU内存,调整网络可用于更改公网带宽大小,云硬盘扩容可用于调整硬盘大小,腾讯云服务器…

技术中台之困:业务需求开发背后的拖累

技术中台作为企业数字化转型的重要支撑,曾一度备受瞩目。然而,近年来,技术中台的声势逐渐式微,曾经的辉煌渐渐褪去。本文将深入探讨技术中台为何没落的原因,并从中汲取教训。 技术中台起源于企业数字化转型的需求&…

由于找不到msvcp100.dll无法继续执行代码怎么解决

当遇到程序无法正常运行,提示缺少msvcp100.dll文件时,最初的反应可能是困惑和不知所措。然而,通过修复msvcp100.dll文件,我发现这个问题实际上并不复杂,并且可以通过一些简单的步骤解决。 在修复msvcp100.dll文件的时候…

谱包络之pysptk和pyworld

谱包络之pysptk和pyworld 谱包络可以直接用于语音的合成,常用的两个计算谱包络的库pysptk和pyword。 先看看代码: 一段语音x,采样率16000Hz pysptk import pysptkframe_length 1024 hop_length 80 order 25 alpha 0.41 frames libro…

JavaWeb学习|JSTL表达式

1.什么是JSTL表达式? JSTL标签库的使用就是为了弥补HTML标签的不足;它自定义许多标签,可以供我们使用,标签的功能和Java代码一样 在JSP页面文件中使用JSTL表达式,首先需要引入核心标签库 同时,也要把JSTL的jar包在to…

家电维修小程序开发指南:从零搭建到上线

随着科技的发展和人们生活水平的提高,家电已经成为人们生活中不可或缺的一部分。然而,随之而来的是家电维修门店业务的繁忙和效率的考验。为了提高家电维修门店的效率和服务质量,建立一个便捷高效的小程序已成为必要的选择。 本文将介绍一个简…

轻松上手流体分析

SOLIDWORKS FloXpress 是一个流体力学应用程序,可计算流体是如何穿过零件或装配体模型的。 根据算出的速度场,可以找到设计中有问题的区域,以及在制造任何零件之前对零件进行改进。 SOLIDWORKS FloXpress 向导会引导您完成以下步骤&#xff1…

C#类型转换

🍟数据类型 大体分为三个大类型:整型(其中又分为有符号整型、无符号整型)、浮点型、特殊类型 注意:浮点数在初始化时要在值后加上后缀,双精度浮点数decimal的后缀为“M”、单精度浮点数double和float的后…

配置docker,案例复现

配置docker(系统为centos) 1.检查操作系统环境: docker要求CentOS系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本是否支持安装docker 2.查看你是否拥有旧的版本,有的话卸载,没有的话直接略过该步骤 sudo yum remove d…

基于PaddleOCR的车牌检测识别

基于PaddleOCR的车牌检测识别 前言前提条件相关介绍PaddleOCR环境要求车牌检测识别准备数据集车牌文本检测下载预训练模型微调、训练车牌检测数据集评估训练好的模型导出模型 车牌文本识别下载预训练模型微调、训练车牌识别数据集评估训练好的模型导出模型 进行预测测试结果图 …

【Windows系统】磁盘、Partition和Volume的联系与区别

1、磁盘 Disk,磁盘。 以下摘自微软 磁盘设备和分区 - Win32 apps | Microsoft Learn 硬盘由一组堆积的盘片组成,其中每个盘片的数据都以电磁方式存储在同心圆或 轨道中。 每个盘片都有两个头,一个在盘片的两侧,在磁盘旋转时读取…

SAS-proc transpose转置

一、语法 by:纵向变量,不转置,保留的变量,by使用需要先排序。 id:需要转置的变量。 var:新数据集中的数据。 idlabel:转置变量的标签。 copy:不转置的变量直接拷贝到输出数据集中。…

Python ImportError报错:No module named ‘numpy.core_multiarray_umath‘

文章目录 背景Import 报错是版本问题吗?删除pandas在Visual Studio中设置Python 环境为什么要在Visual Studio IDE下继续安装Python package在Visual Studio安装numpy和pandasPYTHONPATHDebug模式下继续报错配置Release 工程优化不便之处 1不便之处 2后续 参考 背景…

Reinforcement Learning with Code【Code 5. Policy Gradient Methods】

Reinforcement Learning with Code【Code 5. Policy Gradient Methods】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundati…

想要延长Macbook寿命?这六个保养技巧你必须get!

Mac作为我们工作生活的伙伴,重要性不需要多说。但在使用的过程中,我们总会因不当操作导致Mac出现各种问题。 要想它长久的陪伴,平时的维护与保养自然不能少,Mac的保养很重要的两点就是硬件保养和电脑系统保养,硬件保养…

企业服务器中了Locked勒索病毒怎么办,勒索病毒解密有哪些步骤

随着网络技术的不断发展,勒索病毒攻击成为了企业面临的一种风险。近期,我们收到某医药公司的求助,企业的服务器数据库遭到了locked勒索病毒的攻击,导致企业服务器内的许多重要数据被加密无法正常读取,不仅影响到了企业…

智能合约 -- 常规漏洞分析 + 实例

1.重入攻击 漏洞分析 攻击者利用合约漏洞,通过fallback()或者receive()函数进行函数递归进行无限取钱。 刚才试了一下可以递归10次,貌似就结束了。 直接看代码: 银行合约:有存钱、取钱、查看账户余额等函数。攻击合约: 攻击、以及合约接…

ECG和PPG信号用于PTT、HRV和PRV研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

微信朋友圈置顶功能已大范围上线!

微信是目前全球最受欢迎的社交媒体应用之一,拥有数十亿的用户。作为一款持续发展和改进的应用,微信不断推出新的功能来提升用户体验。 近日,iOS微信8.0.41内测版迎来了更新,本次更新距离上个正式版间隔了大概10天的时间。 微信朋友…

BI技巧丨利用Index计算半累计

在实际的业务场景中,特别是财务模块和库存管理模块,经常需要我们针对每个月的期初期末进行相关指标计算,这也是我们之前曾经提到的Calculate基础应用——半累计计算。 现在我们也可以通过微软新推出的Index开窗函数来解决这一问题。 INDEX函…