【Python基础】文件读写

文章目录

    • @[toc]
      • 打开文件
        • `open()`函数参数解析
        • 示例
      • 文件路径
        • 绝对路径
          • 示例
        • 相对路径
          • 示例
      • 打开文件的模式
        • 常用模式
      • 读文件
        • 示例
      • 写文件
        • 示例
      • 按行读写文件
        • `readline()`
          • 示例
        • `readlines()`
          • 示例
        • `writelines()`
          • 示例
      • 关闭文件
        • 示例
        • `finally`语句
          • 示例
      • 上下文管理器
        • 示例
      • 自定义读写类
        • 示例

打开文件

  • Python中,打开文件使用的是open()函数,open()函数的基本语法如下
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
open()函数参数解析
  • file:要打开的文件路径,可以是绝对路径也可以是相对路径
  • mode:打开文件的模式,默认为r,表示以只读模式打开文件
  • buffering:缓冲策略,是一个可选参数,默认值为None,表示使用系统默认的缓冲策略
    • 取值为 0 0 0False时,表示不进行缓冲,直接从磁盘读取或写入文件
    • 取值为 1 1 1True时,表示行缓冲,即每写入一行数据时,将其写入文件
    • 取值为大于 1 1 1的整数时,表示缓冲区的大小,以字节为单位,指定缓冲区大小可以提高文件的读取和写入效率
    • 取值小于 0 0 0时,使用系统默认的缓冲策略
  • encoding:文件编码,是一个可选参数,默认值为None,表示使用系统默认编码,常用编码包括'utf-8''gbk'
  • errors:编码错误处理方案,是一个可选参数,默认值为None,表示使用系统默认的错误处理方案,常用的取值包括'strict''ignore''replace'
  • newline:换行符处理,是一个可选参数,默认为None,表示使用系统默认的换行符处理方式,常用的取值包括'\n''\r\n'
  • closefd:关闭文件描述符,默认值为True,表示在关闭文件的同时关闭文件描述符
示例
  • 打开C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/test.txt路径下的文件
file = open('C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/test.txt')file_name = file.nameprint(file_name)
C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/test.txt
  • open()函数返回一个File对象,表示计算机中的一个文件,读取文件时需要文件已经存在,否则会引发FileNotFoundError异常

文件路径

  • 文件路径是指文件在计算机上的位置,分为绝对路径和相对路径
绝对路径
  • 绝对路径是指从根文件夹开始的路径
  • Windows系统下,C盘、D盘等为根文件夹,在该盘符中的文件需要从根文件夹开始往下一级一级进行查找
  • Linux系统下,/为根文件夹,所有文件的查找从/开始
示例
file = open('C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/test.txt')file_name = file.nameprint(file_name)
C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/test.txt
相对路径
  • 相对路径是指相对于程序当前工作目录的路径,比如存放当前程序的文件夹的绝对路径是C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/,如果使用相对路径,就可以不写这个路径,用.代替这个路径值
示例
file = open('./test.txt')file_name = file.nameprint(file_name)
./test.txt

打开文件的模式

  • open()函数默认的打开文件的模式为r,表示以只读模式打开文件
常用模式
模式注释
r只读模式,默认模式
w只写模式,写入的内容会覆盖文件原有的内容,如果文件不存在会创建文件再进行写入
a追加模式,在文件末尾追加内容,如果文件不存在会创建文件再进行写入
+读写模式,与其他模式组合使用,如r+w+a+
x创建模式,如果文件已经存在会引发异常
t文本模式,默认模式
b二进制模式,用于访问二进制文件,与其他模式组合使用,如rbwbabrb+

读文件

  • open()函数返回的是一个File对象,使用File对象的read()方法可以读取文件内容,以字符串类型返回
  • read()函数语法
read(self, n=-1)
  • 参数n表示要读取的字符数,默认值为 − 1 -1 1,表示读取整个文件内容
    • 取值大于 0 0 0时,读取文件的前 n n n个字符
    • 取值等于 0 0 0时,不会读取任何字符,返回空字符串
    • 取值小于 0 0 0时,读取整个文件内容
示例
  • test.txt文件中提前写入Hello, world!,然后执行如下代码
file = open('./test.txt', 'r')res = file.read()print(res)
Hello, world!

写文件

  • File对象的write()方法可以向文件写入内容,返回写入文件的字符串的长度
示例
file = open('./test.txt', 'w')
len = file.write('Hello!')print(len)file = open('./test.txt', 'r')
res = file.read()print(res)
6
Hello!
  • w模式写入的内容会覆盖文件原有的内容

  • 如果想要向文件中追加内容,则使用a模式

file = open('./test.txt', 'a')
file.write('\nHello!')file = open('./test.txt', 'r')
res = file.read()print(res)
Hello!
Hello!
  • 通过在追加的字符串中使用换行符\n,可以实现文件中内容的换行

按行读写文件

  • readline()readlines()writelines()方法用于按行读写文件
readline()
  • readline()方法默认情况下读取文件的一行内容,也可以指定在一行中读取的字符数
示例
file = open('./test.txt', 'w')
file.write('Hello, world!\nWelcome!')file = open('./test.txt', 'r')res1 = file.readline()
res2 = file.readline()
res3 = file.readline()print(res1)
print(res2)
print(res3)
Hello, world!Welcome!
  • 可以看到,readline()方法读取当前文件指针所在的一行中的内容,以换行符\n区分文件的每一行,如果readline()方法返回一个空字符串,说明已经读取到文件的末尾
readlines()
  • readlines()方法读取文件的每一行内容,返回一个列表,列表中的每个元素就是文件中的每一行内容
示例
file = open('./test.txt', 'w')
file.write('Hello, world!\nWelcome!')file = open('./test.txt', 'r')
res = file.readlines()print(res)
['Hello, world!\n', 'Welcome!']
writelines()
  • writelines()方法向文件写入每一行内容,传入一个列表,列表中的每个元素就是写入文件中的每一行内容
示例
file = open('./test.txt', 'w')
len = file.writelines(['Hello, world!\n', 'Welcome!'])file = open('./test.txt', 'r')
res = file.read()print(res)
Hello, world!
Welcome!

关闭文件

  • 一般情况下,一个文件对象在退出程序后会自动关闭,但是为了保证数据安全,还是要显示地写一个close()方法,用于关闭文件
示例
file = open('./test.txt')file_name = file.nameprint(file_name)file.close()
./test.txt
finally语句
  • 当使用try语句发生异常时,即使使用了close()方法,也可能不被执行
  • 可以将close()方法放在finally语句中,从而保证无论程序是否发生异常都会调用close()方法来关闭文件
示例
file = None
path = './test.txt'try:file = open(path, 'r')
except FileNotFoundError as e:print(e)
finally:if file:print(file.name)file.close()
./test.txt

上下文管理器

  • Python中的with语句可以帮助我们自动调用close()方法
示例
with open('./test.txt', 'r') as file:file_name = file.nameprint(file_name)
./test.txt
  • as关键字用于将文件对象赋值给变量file

  • with语句中的代码运行结束时,会自动调用close()方法


自定义读写类

示例
class OpenFile:def __init__(self, file_name):self.file_obj = file_namedef __enter__(self):self.file_obj = open(self.file_obj, 'r', encoding='utf-8')return selfdef __exit__(self, exc_type, exc_val, exc_tb):self.file_obj.close()def my_read(self):print(self.file_obj.read())with OpenFile('./test.txt') as file:file.my_read()
Hello, world!
Welcome!
  • 当被with语句调用时会自动触发__enter__()方法,用于打开文件
  • with语句中的代码运行结束时,会自动触发__exit__()方法,用于关闭文件
  • 自定义读写类展示了上下文管理器的底层实现

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

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

相关文章

计算机网络:物理层(编码与调制)

今天又学会了一个知识,加油! 目录 一、基带信号与宽带信号 1、基带信号 2、宽带信号 3、选择 4、关系 二、数字数据编码为数字信号 1、非归零编码【NRZ】 2、曼彻斯特编码 3、差分曼彻斯特编码 4、归零编码【RZ】 5、反向不归零编码【NRZI】 …

查找Apple Watch的序列号有重要意思,主要有两种方法

如果你打算购买二手Apple Watch,你可能需要检查它的序列号或IMEI号,来确保可靠性。以下是如何从Apple Watch和iPhone中查找序列号。 在Apple Watch上查找序列号和IMEI 1、在Apple Watch上,按下手表表面的数字皇冠以打开应用程序网格或列表。…

【设计模式--行为型--访问者模式】

设计模式--行为型--访问者模式 访问者模式定义结构案例优缺点使用场景扩展分派动态分派静态分派双分派 访问者模式 定义 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。 结构 抽象访问者角色&…

晶体管的工作状态判断和工作条件

晶体管是模拟电路中基础的器件,对于电子工程师来说,了解晶体管工作的条件和判断晶体管的工作状态都是非常基础的,本文将带大家一起学习或回顾一下。 一、晶体管工作的条件 1.集电极电阻Rc: 在共发射极电压放大器中,…

在Linux中遇到“没有可用软件包”的情况

1. 旧的或不完整的软件源 更新你的软件源列表 对于Ubuntu/Debian系统 sudo apt-get update 对于RHEL/CentOS系统,使用命令 sudo yum update 或 sudo dnf update(取决于你的系统版本) 添加其他软件源: 例如,你可以安…

HPM6750系列--第十篇 时钟系统

一、目的 上一篇中《HPM6750系列--第九篇 GPIO详解(基本操作)》我们讲解了HPM6750 GPIO相关内容,在进一步讲解其他外设功能之前我们有必要先讲解一下HPM6750的时钟系统。 时钟可以说是微控制器系统中的心脏,片上外设模块必须依赖时…

爱普生手机打印助手Epson Smart Panel下载分享

新一代智能打印Epson Smart Panel为您提供一站式打印服务,人性化装机助手,智能联网,快速开启远程微信打印,全新交互式设计,打印体验焕新升级; 根据手机不同可选下列不同下载方式: 人性化智能装机…

《每天一分钟学习C语言·一》

1、转义字符:\n换行,\t前进一个tab键,\b退格键 2、八进制前面有0,%o或者%#o表示八进制,十六进制前有0X,%0x或者%#0x表示十六进制 3、%u打印无符号数,%g显示小数,类似于%f&#xff…

给机器安装ubuntu

准备材料: 1.镜像iso(地址:清华镜像源https://mirror.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ubuntu-20.04.6-live-server-amd64.iso 2.U盘(4gb就行) 3.制作启动盘工具(地址:https://clone-audio-dataset-1309770014.co…

【开题报告】基于uniapp的家庭记账小程序的设计与实现

1.研究背景 随着社会经济的发展和人们生活水平的提高,家庭财务管理变得越来越重要。家庭记账是一种重要的财务管理方式,通过记录和分析家庭的收入和支出情况,可以帮助家庭成员更好地理解和掌握自己的财务状况,合理规划和管理家庭…

LibreNMS:从docker出发

引言 LibreNMS 是一个免费开源的网络监控和自动化工具,用于监视网络设备、服务器和应用程序的性能和状态。它提供了一个集中的管理平台,帮助管理员实时监控和管理整个网络基础设施。 以下是 LibreNMS 的一些主要特点和功能: 自动发现&#…

深度学习 | 大模型领域常见名词解释

预训练模型 预训练模型是在大规模数据集上进行了预先训练的模型,通常包含了通用的特征或知识。 通常用于迁移学习,即将预训练模型的知识迁移到新的任务中。 例子:BERT、GPT、VGG等。 训练好的模型: 训练好的模型是根据你的特定…

TikTok矩阵玩法分享,如何建立TikTok矩阵?

矩阵是在 TikTok 上非常常见的营销方式,很多卖家想要通过矩阵化运营快速涨粉。但要想做好TikTok矩阵,需要有明确的方向和计划。下面东哥我将分享一些做TikTok矩阵的玩法,帮助大家更好地搭建自己的TikTok矩阵。 了解TikTok矩阵 TikTok矩阵是一…

同时获取el-select的label和value

ui如下: 需求如下: 在点击确认的时候,将id和name都传给一个接口,但是ui只用展示name,name用v-model绑定给input框,但是id不知道怎么传给后端。 解决方法如下: vue中elementUi的el-select同时…

JVM-9-Class类文件的结构

Java技术能够一直保持着非常良好的向后兼容性,Class文件结构的稳定功不可没。 Class文件是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件之中。 Class文件格式采用一种类似于C语言结构体的伪结构来存储数据&#xff0c…

CSS的三大特性

CSS有三个非常重要的特性:层叠性、继承性、优先级 1.1 层叠性 相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突 重叠性原则: 样式冲突,遵循的原则是就…

FineReport 高级教程:销售数据分析与报表设计

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

c语言突击

一:前序 1.一个c语言程序有且只有一个main函数,是程序运行的起点! 每个c语言程序写完后,都是先编译(.c---),后链接(.obj---),最后运行(.exe&…

JAVA的三大版本

🍎个人主页 🏆​​​​​​​个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 一、Java 二、JavaSE(Java Standard Edition) 三、JavaME(Java Micro Edition) 四、JavaE…

文件操作(下)

标题的顺序是接着之前写的,希望这篇博客对你有帮助 七. 随机读写函数 实际上,无论是读还是写,在一次调用顺序读写函数,文件指针会移到已经读过或者写过的下一个位置,从那个位置开始下一次读和写(在文件没有…