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

Python_文件操作_学习

目录

一、关于文件的打开和关闭

1. 文件的打开

2.文件的关闭

二、文件的读取

1. 文件的读_r

2. 使用readline

3.使用readlines

三、文件的写入

1. 文本的新建写入

2.文本的追加写入

四、文件的删除和重命名

1.文件的重命名

2.文件的删除

五、文件的定位读写

1.tell( )函数

2.seek( )函数

附录 P.S.


一、关于文件的打开和关闭

1. 文件的打开

在Python中,open函数用来打开文件,语法格式如下: 

常见的文件打开模式:

又通过互相组合可以得到几个新的常见模式:

栗子:

当我们只打开某个文件时,要先确保这个文件是存在的。

所以,先创建一个文本文件(与创建python文件类似):

                                  在项目栏中 鼠标右击-->新建-->文件

输入想命名的名字,写上后缀 .txt  

然后输入内容... 

最后、回到python文件,打开一个文本文件

根据填写要求,文件名是一定要有的,模式可以选填,如果不填,则要保证文本是存在的,否则报错。

控制台结果显示:这个字符串表示的是一个已经打开的文本文件 poem.txt,它被设置为只读模式,并且使用 GBK 编码进行文本的编码和解码。

2.文件的关闭

文件的关闭强调打开了的文件,要使用close语句关闭。因为即便文件会在程序退出后自动关闭,但考虑到数据的安全性,在每次使用完文件后,都要使用close语句关闭文件,否则一旦程序奔溃就可能导致文件中的数据没有保存。

二、文件的读取

1. 文件的读_r

f = open("poem.txt", "r", encoding="utf-8")
'''打开事先备好的文本文件,填“r”读的模式,后面是编码方式
如果你测试的文本文件txt内容含有中文,最好写上encoding编码方式,否则报错'''
content = f.read()  # 对f变量进行读取操作再赋给content
print(content)
f.close()

打印结果:

2. 使用readline

readline方法是逐行读取,比较繁琐...

f = open('poem.txt', "r", encoding='utf-8')
c1 = f.readline()
c2 = f.readline()
c3 = f.readline()
c4 = f.readline()
c5 = f.readline()
c6 = f.readline()
print(c1)
print(c2)
print(c3)
print(c4)
print(c5)
print(c6)
f.close()

考虑文本中存在换行以及print自带换行,最后结果是每行之间 空的比较大

3.使用readlines

readlins的用法是把整个文本内容一次性都读取了。

栗子:

这里我们用with...as:语句。因为Python中 ,with...as:语句是一种很好的上下文管理器, 可以确保无论代码块中发生什么情况,文本资源最终都会被正确地释放和关闭。可以防止忘记写close( )。

这里事先换了首诗,可看到系统自动加\n换行,所以为了好看点,readlines一般可以和for语句一起用: 

with open("poem.txt", "r", encoding="utf-8") as f:c = f.readlines()for p in c:  # 使用for循环,可以逐行显示序列print(p)

打印结果:

三、文件的写入

1. 文本的新建写入

向文件写入数据时,如果文件不存在,那么系统会自动创建一个文件并写入数据。如果文件存在,那么会清空文件原有的数据,重新写入新数据。

最后控制台显示的是 字符数:49

2.文本的追加写入

文本的追加写入,我们用模式“ a ”

在文末添加内容根据注意换行啊

四、文件的删除和重命名

在Python中,我们要对文本文件进行删除和重命名的话,可以使用标准库中的os模块。与读取类似,对文件删除或重命名之前,最好先检查文件是否存在,以避免抛出异常。

1.文件的重命名

os模块通过rename函数对文件重命名,rename函数接收两个参数,分别是旧的文件名和新的文件名。

栗子:

# 引入os模块
import os 
# 将 poem 改成 love_poem
os.rename('poem.txt', "love_poem.txt")

运行后,会发现原来目录下面文本文件的名字已改 

2.文件的删除

文件的删除用到os模块中的remove函数,remove函数接受一个参数,即要删除的文件的路径。如果文件被成功删除,该函数不会有任何返回值。如果文件不存在,os.remove()会抛出一个 FileNotFoundError 异常。

例如:

# 引入os模块
import os
# 删除love_poem的文本文件
os.remove('love_poem.txt')

五、文件的定位读写

在Python中,文件的读写定位是指 “控制文件读写操作的位置”,以便于能够从文件的特定位置开始读取或写入数据。 通常通过文件的指针来实现,该指针指示下一次读写操作将在文本的哪个位置进行。以下两个函数是常见的获取和设置文件指针的位置。

1.tell( )函数

tell()函数会返回文件指针的当前位置,注意中英文字符对位置的影响。

# 打开一个存在的文本文件
f = open("poem.txt", "r", encoding="utf-8")
# 这里偏移量为4,
words = f.read(4)
print("第一次读取的数据:"words)
# 查找当前位置
position =f.tell()
print("第一次的位置是:",position)words = f.read(16)
print("第二次读的数据:",words)
position =f.tell()
print("第二次位置是:,position)

测试的文本: 

 

打印结果:

这里第一次位置1844.....我也不懂咋来的,希望有懂的大佬,不吝赐教,留言相告哈。

然后,转成字母,显示位置就正常^-^。

2.seek( )函数

如果希望 重置(重新定位) 指针的位置,可以考虑seek函数

seek函数语法格式:

(1)offset : 表示偏移量,也就是需要移动的字节数。

(2)whence: 表示方向,该参数的值有以下三个:

0 : 是whence参数的默认值,表示从文件的起始位置开始偏移,所以也可以不写。

1 : 表示从文件当前的位置开始偏移。

2 : 表示从文件末尾开始偏移。

f = open("poem.txt", "r", encoding="utf-8")
words = f.read(4)
print("第一次读取的数据:", words)
position = f.tell()
print("第一次读取的位置:", position)f.seek(10)  # 从初始开始偏移10个
position = f.tell()
print("第二次位置是:", position)
words = f.read(20)
print("第二次读取的数据:", words)
f.close()

后半段seek函数重新偏移从开头到位置10时,接着开始第二次读取20个字符,这20个字符是在第10个字符位置的基础上再往后读20个。

这里10大概是:一行5字+1符号+1换行,然后’唐’前我是2个空格

附录 P.S.

关于“字符、字节..”的一些百度:

1.空格: 在UTF-8编码中,一个空格字符(在 ASCII表中)占用一个字节。

2.中文字符: UTF-8 是一种可变长度的编码系统,中文字符可能占用3个字节或者更多,具体取决于字符的Unicode码点。

3.英文字符: 大多数英文字符(包括英文字母和一些基本标点符号)在 UTF-8 编码中通常占用一个字节。

4.中文标点: 中文标点符号的字节数也可能不同,一些常见的中文标点符号可能占2个或3个字节。

5.英文标点: 大多数英文标点符号,如句号(.)、逗号(,)、分号(;)等,在 UTF-8 编码中通常占用一个字节。

6.特殊字符: 一些特殊字符,如 emoji (表情)或其他非ASCII字符,可能占用更多的字节,。

总之,在处理文本时,字符计数通常是指逻辑字符的数量,而不是字节数。在UTF-8编码中,一个中文字符可能占用多个字节,但仍然被视为一个逻辑字符。同样,空格和标点符号,无论它们占用多少字节,通常每个都被视为一个逻辑字符。(如:len() 函数)来获取字符串的长度时,它返回的是逻辑字符的数量,而不是字节数。

相关文章:

Python_文件操作_学习

目录 一、关于文件的打开和关闭 1. 文件的打开 2.文件的关闭 二、文件的读取 1. 文件的读_r 2. 使用readline 3.使用readlines 三、文件的写入 1. 文本的新建写入 2.文本的追加写入 四、文件的删除和重命名 1.文件的重命名 2.文件的删除 五、文件的定位读写 1.t…...

Leetcode 3154. Find Number of Ways to Reach the K-th Stair

Leetcode 3154. Find Number of Ways to Reach the K-th Stair 1. 解题思路2. 代码实现 题目链接:3154. Find Number of Ways to Reach the K-th Stair 1. 解题思路 这一题思路上就是一个动态规划,我们只需要确定一下运行的终止条件,然后写…...

Vue3/Vite引入EasyPlayer.js播放H265视频错误的问题

一、引入EasyPlayer.js github链接:GitHub - EasyDarwin/EasyPlayer.js: EasyPlayer.js H5播放器 将demo/html目录下的 EasyPlayer-element.min.js、EasyPlayer-lib.min.js、EasyPlayer.wasm、jquery.min.js 复制到vue3工程的public目录下,注意,vue3 vite的index.html文件…...

CentOS 7安装alertmanager

说明:本文介绍如何在CentOS 7安装alertmanager; Step1:下载安装包 访问Github仓库,下载对应版本的alertmanager安装包 https://github.com/prometheus/alertmanager/releases 如何查看自己系统的信息,可参考下图中的…...

YOLOv10详细解读 | 一文带你深入了解yolov10的创新点(附网络结构图 + 举例说明)

前言 Hello大家好,我是Snu77,继YOLOv9发布时间没有多久,YOLOv10就紧接着发布于2024.5.23号(不得不感叹YOLO系列的发展速度,但要纠正大家的观点就是不是最新的就一定最好)! 本文给大家带来的是…...

【openlayers系统学习】3.5colormap详解(颜色映射)

五、colormap详解(颜色映射) ​colormap​ 包是一个很好的实用程序库,用于创建颜色图。该库已作为项目的依赖项添加(1.7美化(设置style))。要导入它,请编辑 main.js​ 以包含以下行…...

Redis教程(十五):Redis的哨兵模式搭建

一、搭建Redis一主二从 分别复制三份Redis工作文件夹,里面内容一致 接着修改7002的配置文件,【redis.windows-service.conf】 port 7002 改成 port 7002 slaveof 127.0.0.1 7001 7003也同样修改 port 7003 slaveof 127.0.0.1 7001 这样就指定了700…...

【C语言】8.C语言操作符详解(3)

文章目录 10.操作符的属性:优先级、结合性10.1 优先级10.2 结合性 11.表达式求值11.1 整型提升11.2 算术转换11.3 问题表达式解析11.3.1 表达式111.3.2 表达式211.3.3 表达式311.3.4 表达式411.3.5 表达式5: 11.4 总结 10.操作符的属性:优先级、结合性 …...

离线初始化k8s

导出和导入所有必要的 Kubernetes 镜像,使用阿里云作为源。 在能访问外网的机器上拉取镜像 首先,在有外网访问的机器上运行以下命令来拉取所有 Kubernetes v1.29.5 版本需要的镜像: kubeadm config images pull --image-repository regist…...

C++字符编码 cppp-reiconv库使用详解

经常写一些控制台小程序,常常会遇到输出中文乱码的问题,在windwos下可以使用MultiByteToWideChar转换字符编码,但跨平台就需要cppp-reiconv这样的第三方字符编码处理库,且开源。 一、下载cppp-reiconv库的源码和静/动态库 GitHu…...

通过继承React.Component创建React组件-5

在React中,V16版本之前有三种方式创建组件(createClass() 被删除了),之后只有两种方式创建组件。这两种方式的组件创建方式效果基本相同,但还是有一些区别,这两种方法在体如下: 本节先了解下用extnds Reac…...

PgSQL内核机制 - 算子执行统计元组个数

PgSQL内核机制 - 算子执行统计元组个数 我们在执行explain analyze观察执行计划执行情况时,时常通过每个算子实际执行结果来分析SQL的执行,其中有一项“rows XXX”表示执行的行数(这里姑且先认为是执行的真实行数)。但有些场景下…...

Ubuntu/Linux 安装Paraview

文章目录 0. 卸载已有ParaView1. 安装ParaView1.1 下载后安装 2.进入opt文件夹改名3. 更改启动项4. 创建硬链接5. 添加桌面启动方式6. 即可使用 0. 卸载已有ParaView YUT 1. 安装ParaView https://www.paraview.org/ 1.1 下载后安装 找到下载的文件夹,文件夹内…...

内存泄漏及其解决方法

1. 系统崩溃前的现象 垃圾回收时间延长:从原本的约10ms增长至50ms,Full GC时间也由0.5s增加至4-5s。Full GC频率增加:最短间隔可缩短至1分钟内发生一次。年老代内存持续增长:即使经过Full GC,年老代内存未见明显释放。…...

Java进阶学习笔记13——抽象类

认识抽象类: 当我们在做子类共性功能抽取的时候,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了。在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类就定义为抽象类…...

【Docker学习】深入研究命令docker exec

使用docker的过程中,我们会有多重情况需要访问容器。比如希望直接进入MySql容器执行命令,或是希望查看容器环境,进行某些操作或访问。这时就会用到这个命令:docker exec。 命令: docker container exec 描述&#x…...

C语言中的文件操作

前言 嗨,我是firdawn,在本章中我们将介绍,文件的概念,文件的打开和关闭,在篇末我们将介绍文件缓冲区的作用,下面是本章的思维导图,接下来,让我们开始今天的学习吧! 一…...

python使用xlrd读取excel的时候把字符串读成了数字

xlrd 是一个 Python 库,用于读取 Excel 文件(.xls 和 .xlsx,但 .xlsx 需要 openpyxl 或 xlrd 的较新版本)。然而,xlrd 在读取 Excel 文件时通常会将单元格的内容按其原始数据类型(如字符串、数字、日期等&a…...

【C语言】走进指针世界(下卷)

前言 在“走进指针世界(上卷)”中,我们已经说过:什么是指针、内存和地址,指针的使用、声明、初始化,取地址运算符、解引用运算符以及这两者关系,还有指针赋值。 在正式使用指针进行各种代码的…...

【Spring】SSM整合_入门代码实现

1. Maven依赖 在pom.xml中添加SSM框架的依赖 <!-- Spring Core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.x</version> </dependency>…...

Claude in Excel:原生集成的AI表格协作者

1. 项目概述&#xff1a;这不是插件&#xff0c;是Excel里长出来的AI同事“Claude in Excel”这个标题刚看到时&#xff0c;我下意识点开几个技术社区翻了一圈&#xff0c;发现多数人第一反应是&#xff1a;“又一个AI插件&#xff1f;”——其实完全不是。它根本没走传统Offic…...

无机布防火卷帘门报价透明,包工包料,一次说清所有费用

很多客户在选购无机布防火卷帘门时&#xff0c;最关心实际成交价格&#xff0c;也担心报价不清晰&#xff0c;后期产生各类额外支出。行业内产品定价参差不齐&#xff0c;选材做工不同&#xff0c;最终价位自然存在差距&#xff0c;挑选时不能只看表面低价。 &#x1f449; 点击…...

DeepSeek系统设计辅助:如何在48小时内完成可审计、可回滚、可压测的AI服务架构图?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek系统设计辅助 DeepSeek系统设计辅助模块面向架构师与后端工程师&#xff0c;提供模型能力调用、接口契约生成、异步任务编排等核心支撑能力。该模块不替代人工设计决策&#xff0c;而是通过结构…...

账务台账数据

银行里说的 “账务台账数据”&#xff0c;本质就是按会计规则把每笔业务逐笔、分户、分科目记下来的完整明细流水 余额 辅助信息&#xff0c;核心是 “可逐笔追溯、可对账、可审计” 的一套明细数据。下面用通俗、具体的方式拆开说&#xff1a;一、银行 “账务台账” 到底是什…...

Unity Visual Scripting不是拖拽玩具:中阶开发者的编程范式重构指南

1. 为什么Unity官方Visual Scripting不是“拖拽完就能跑”的玩具&#xff0c;而是一套需要重新理解的编程范式很多人第一次点开Unity的Visual Scripting&#xff08;VS&#xff09;面板时&#xff0c;看到那些五颜六色的节点和丝滑的连线&#xff0c;下意识觉得&#xff1a;“这…...

MeloTTS实战:多语言语音合成的高效解决方案

MeloTTS实战&#xff1a;多语言语音合成的高效解决方案 【免费下载链接】MeloTTS High-quality multi-lingual text-to-speech library by MyShell.ai. Support English, Spanish, French, Chinese, Japanese and Korean. 项目地址: https://gitcode.com/GitHub_Trending/me/…...

HiveWE终极指南:快速掌握魔兽争霸III现代化地图编辑器

HiveWE终极指南&#xff1a;快速掌握魔兽争霸III现代化地图编辑器 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为传统魔兽争霸III地图编辑器缓慢的加载速度和复杂的操作界面而烦恼吗&#xff1f;Hiv…...

从API调用成功率看Taotoken服务的稳定性与容灾表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 从API调用成功率看Taotoken服务的稳定性与容灾表现 在将大模型能力集成到自动化流程或日常开发工具链时&#xff0c;服务的稳定性和…...

你的差异基因结果可靠吗?用MetaVolcanoR给多个GEO数据集做一次‘交叉验证’吧

你的差异基因结果可靠吗&#xff1f;用MetaVolcanoR给多个GEO数据集做一次"交叉验证"当你在GEO数据库中下载了三个肺癌研究的差异表达结果&#xff0c;却发现三个DEG列表的重叠基因不到20%——这种令人沮丧的场景每天都在全球实验室上演。单项研究的差异分析结果就像…...

3步掌握OpenSpeedy:免费开源游戏加速工具使用指南

3步掌握OpenSpeedy&#xff1a;免费开源游戏加速工具使用指南 【免费下载链接】OpenSpeedy &#x1f3ae; An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 你是否曾为游戏卡顿而烦恼&#xff1f;是否希望在单机游戏中加快…...