当前位置: 首页 > 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>…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...