Python08--文件读取及写入操作
有些时候我们在处理数据之后就会想将我们的数据保存到文件中,实现数据的持久化。而不仅仅是输出到我们的集成开发环境的控制台上(直接打印在控制台上并不能够实现保存我们数据的功能,只要我们的集成开发环境已关闭,或者是电脑关机,那么我们打印出来的数据也会随之消失),例如我们在使用print函数打印输出数据时,只是将我们的数据暂时存放到了内存中,并没有存放到硬盘上。数据的持久化方式有两种,一种是存放到数据库中(这种方式一般是二进制的数据才可以,如音视频等),另外一种就是以文件的形式(这种方式,可以存放文本字符数据,如中文字符等)。
我们一般使用代码处理的数据都是非结构化的数据,即存放的位置位置是文件里面,而不是数据库里面。
涉及到文件处理的代码或者是相关的操作,在计算机中一般称之为文件流操作。文件流的操作有文件的读取和文件的写入两个操作。然后我们操作的对象可以是字节流对象(处理的是二进制文件)也可以是字符流对象(处理的是文本文件)。
字节流的数据读取和字符流的数据读取不同,因为字节流不用考虑编码格式问题,而我们的字符流数据因为会有中文数据的存在,所以需要考虑到将编码格式修改成utf-8的格式。
目录
一,文件的打开和读取
1,打开文件
2,文件读取
1)使用read函数读取文件内容
①读取文本字符出现乱码,指定编码格式为utf8
2)使用readline函数读取文件内容
3)使用readlines函数读取文件内容
3,总结三个读取文件的方法
二,文件的写入及关闭
1,write函数(方法)
2,close函数(方法)
3,writelines方法
一,文件的打开和读取
文件的打开,关闭与读写是文件的基本操作,需要注意是:数据写入完毕后需要将文件进行关闭,不仅是用来释放我们的计算机内存,也是为了我们后期在对文件进行其他操作时候可以执行成功,如果我们打开了一个文件,但是却没有去关闭,那么我们的程序就会默认我们的文件是打开,然后不管我们在对文件进行什么操作,都不会成功。说得再多,不如直接撸码来得直接,现在我们去使用代码来看一下具体的使用和效果:
1,打开文件
if __name__ == '__main__':f_or=open(r"F:\novels\English\computer.txt") # 以只读的方式打开文件print(f_or) # 若文件打开成功(函数调用成功),返回一个文件对象
我们现在只是简单的使用了open函数,并在里面传入了我们的文件路径进去即可实现打开文件的功能,然而事实上,该函数里面不止一个文件路径参数,还可以传入我们要使用的编码格式(encoding="")来打开我们的文件,以及打开后希不希望外界去修改我们的文件(mode="",如果不指定打开的模式,则默认使用只读模式打开文件)。那么文件的其他打开模式有哪些呢?我们来看如下表格:
r/rb | 只读模式。打开文件后只能读取,若文件不存在,则打开文件失败 |
w/wb | 只写模式。若文件存在重写文件,否则创建该文件 |
r+/rb+ | 读取(更新)模式。若文件不存在,则打开文件失败 |
w+/wb+ | 读取(更新)模式。若文件不存在,则创建文件,已存在,则重写文件 |
a/ab | 追加(更新)模式。以追加方式打开文件,只允许在该文件末尾追加数据,若文件不存在则,则创建新文件 |
a+/ab+ | 追加(更新)模式。和a/ab的使用差不多,作用一样 |
后面带有b的表示以二进制方式打开文件,+表示以更新的方式打开文件。
我们的mode关键字可以省略,直接传入文件的打开模式也是可以的。我们先做个了解,知道里面可以传入这些参数,我们认识了另外一个写入函数之后,再去对比一下这些mode打开模式的异同。
2,文件读取
1)使用read函数读取文件内容
①读取文本字符出现乱码,指定编码格式为utf8
如下,当我们使用如下代码打开我们含有字符文件 时,会发现无法正常显示出来中文内容,并出现了乱码:
if __name__ == '__main__':f_or=open(r"F:\novels\English\textdemo.txt",'r') # 以只读的方式打开文件print(f_or.read())
那么我们该如何去去掉这个乱码?其实很简单,只需要在open函数最后再传入encoding="utf8"即可,如下:
if __name__ == '__main__':f_or=open(r"F:\novels\English\textdemo.txt",'r',encoding="utf8") # 以只读的方式打开文件print(f_or.read())
在上面我们使用了read函数读取了文件textdemo.txt,我们使用的是默认的read方法,即不传入参数(或者是设置为-1),则一次性读取并返回文件中的所有数据。
如果我们在里面传入了参数值(数值类型),即设置了读取数据的字节数,那么就会读取文件中指定长度的数据:
2)使用readline函数读取文件内容
该函数只可以从指定文件中读取一行数据,如下:
if __name__ == '__main__':f_or=open(r"F:\novels\English\textdemo.txt",'r',encoding="utf8") # 以只读的方式打开文件print(f_or.readline())
如上我们可以看到,我们使用readline方法读取文件只会返回第一行的数据内容,之后换行的数据并不会返回,如果想要返回第二行的数据,我们可以给一个循环,重复调用该函数,或者是写两次print函数来打印:
1,调用两次print函数:
if __name__ == '__main__':f_or=open(r"F:\novels\English\textdemo.txt",'r',encoding="utf8") # 以只读的方式打开文件print(f_or.readline())print(f_or.readline())
2,使用for循环语句:
if __name__ == '__main__':f_or=open(r"F:\novels\English\textdemo.txt",'r',encoding="utf8") # 以只读的方式打开文件for i in range (1,3):print(f_or.readline())
3)使用readlines函数读取文件内容
如果我们使用readlines方法取读取文件数据的话返回的就是个列表数据,在这一点上与之前的read方法和readline方法都很不同,它从之前的字符数据类型变成了列表类型的数据:
if __name__ == '__main__':f_or=open(r"F:\novels\English\textdemo.txt",'r',encoding="utf8") # 以只读的方式打开文件print(f_or.readlines()) # 读取成功,返回一个列表
如上,我们可以看到,使用readlines方法返回的确实是列表类型的数据,结合之前学习的列表数据相关的知识,我们如果想要取出来数据的话可以使用遍历的方式取获取。
3,总结三个读取文件的方法
以上介绍了3个读取文件的方法,当我们的read函数不传入参数时,实现的效果就会和readlines方法是一样的,两个都会一次性读取我们文件里面的数据,很多人会说这样子感情好,可以直接一次性就把我们的文件读取出来,以后直接使用这两个方法就行。实际上并不推荐这两种方法的使用,因为它适合于所读取的文件较小的时候,但是当我们的文件较大,像大数据的文件,那是可能会突破GB的文件,如果我们使用了read()和readlines()方法的一次性读取我们的文件,则可能会耗尽我们的系统内存,因为我们的计算机的内存是有限的。所以为了保证读取安全,推荐多次去调用read(n)方法---n:表示每次读取n字节的数据。
二,文件的写入及关闭
通过以上的open方法和read方法的使用,我们现在能够成功的打开一个文件,并能看到里面的内容,之后如果我们想要往该文件中写入数据内容的话,该怎么做呢?首先就需要用到一种函数---文件写入函数,我们可以使用两个函数来分别写入数据到文件中:1,write函数;2,writelines函数
1,write函数(方法)
我们先来认识write函数,该函数可以将指定字符串写入文件中,格式为:write(data)---data表示我们需要写入文件的数据(字符串),如果数据写入成功,write方法会返回本次写入文件的数据的字节数。如下,我们使用该方法来将写入数据到我们的textdemo.txt文件中:
if __name__ == '__main__':context="The computer grade examination is divided into four levels. " # 字符串数据f_or=open(r"F:\novels\English\textdemo.txt",'r',encoding="utf8") # 以只读的方式打开文件f_or.write(context) # 写数据
我们的代码如上,相信大家也发现了,我们的文件打开模式还是之前的只读模式,并且在这个文件模式下调用了write方法来进行写数据操作,想想结果会怎样?没错,结果就是会报错,如下:
如上,因为文件用得是只读模式打开,所以我们无法进行数据写入的操作,那么,如果想要写数据又该怎么办?是的,使用r+,w/w+或者是a/a+函数:
1,r+,读写(更新)模式
该模式如果调用写入方法成功,会将之前已经存在的数据进行覆盖,并且,如果所要操作的文件 如果不存在的话就会报错。
if __name__ == '__main__':context="r+...The computer grade examination is divided into four levels. " # 字符串数据f_or=open(r"F:\novels\English\textdemo.txt",'r+',encoding="utf8") # 以只读的方式打开文件f_or.write(context) # 写数据
如果我想要在写的同时,也将写进去的文件内容输出到控制台的话就可以使用read函数来读取:
if __name__ == '__main__':context="r+...The computer grade examination is divided into four levels. " # 字符串数据f_or=open(r"F:\novels\English\textdemo.txt",'r+',encoding="utf8") # 以只读的方式打开文件f_or.write(context) # 写数据print(f_or.read()) # 读数据并打印输出f_or.close() # 关闭流,释放资源
如上,相信细心的大家也发现代码中多了一个close方法的调用。
2,close函数(方法)
该方法主要的作用就是用来关闭文件的,它和read()方法一样,是文件对象的内置对象,可以使用close方法来关闭已打开的文件textdemo.txt。可能会有人说,我就喜欢把文件一直打开着,就不关闭,哎~~,反正看起来也没啥事发生,就是玩~~~。其实也不是不可以,但是我们计算机中可打开的文件数量是有限的,每打开一个文件,剩下可打开的文件数量就会减少1个,打开的文件是会占用系统资源的,若打开的文件过多,会降低系统性能。有些时候还会造成数据的丢失,因此,在编写代码时,应该在程序中主动关闭不再使用的文件。
但是有些时候我们写得代码多了,就会一不小心忘记了去调用close方法来关闭我们的还打开着的文件,即很容易遗漏文件关闭操作。python很贴心地为我们提供了一个with语句来预定义清理操作,实现文件的自动关闭等。使用with语句后,我们的代码可以进行如下修改:
if __name__ == '__main__':context="r+...The computer grade examination is divided into four levels. " # 字符串数据with open(r"F:\novels\English\textdemo.txt",'r+',encoding="utf8") as f: # 已读写(更新)的方式打开文件f.write(context) # 写数据print(f.read()) # 读数据并打印输出
在上面的代码中,我们将打开文件后得到的文件对象使用as后的变量f来进行接受。使用了with语句之后我们的程序中无需再使用close方法关闭文件,因为我们的文件对象在使用完毕后,with语句会自动的帮我们关闭不用的文件。如此方便的with语句还不用起来?
Python08--文件读取及写入操作相关推荐
- C语言的文件读取与写入操作
学了一年的C语言了,现在回过头来做一下总结.并且博客开了挺长一段时间却没有谢什么实际的东西.现在做下总结,对之后的学习帮助应该挺大的.与大家共勉! 现在,我先来介绍一下C语言的文件读取与写入的原理和具 ...
- Verilog中testbench的设计,文件读取和写入操作
1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应. 端口分为 input,output 和 inout 类型产生激励信号的时候, input 对应的端口应当 ...
- testbench的设计 文件读取和写入操作 源代码
十大基本功之 testbench 1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应. 端口分为 input,output 和 inout 类型产生激励信号的 ...
- python对文件的读操作有哪些方法-Python中文件的读取和写入操作
从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 wi ...
- python对文件的读操作方法有哪些-Python中文件的读取和写入操作
从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 wi ...
- java创建读取文件_Java实现文件的创建、读取、写入操作-Fun言
在日常的开发中,对文件的操作经常会有,所以今天教大家其中一种使用Java实现文件的创建.读取.写入操作 创建文件String filenameTemp = "D:\demo.txt" ...
- xml 和android脚本之家,Android利用Document实现xml读取和写入操作
本文实例为大家分享了利用Document实现xml读取和写入操作,供大家参考,具体内容如下 首先先来介绍一下什么xml?xml是可扩展标记语言,他可以用来标记数据,定义数据类型.是一种允许用户对自己标 ...
- c#大文件读取和写入数据库
c#大文件读取和写入数据库(带进度条的源代码) 最近一个项目需要将大文件写入和读取到数据库,觉得可能很多人也需要相关得东西,所以就将代码帖出来 protected int state = 0; //表 ...
- java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...
文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术 如题:文件信息的批量导入-- 项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中 ...
- python数据框元素的性质_Pandas基础:文件读取与写入、Series和Dataframe、常用基本函数、排序...
import pandas as pd import numpy as np 查看Pandas版本 pd.__version__ 一.文件读取与写入 1.读取 (a)csv格式 df = pd.rea ...
最新文章
- access下如何配置两个vlan_【新华三】网络工程师 H3C如何配置VLAN-trunk 二层隔离技术...
- [PHP打野] 对pear-FSM的研究(一)基本了解
- 你所不知道的Android Studio调试技巧
- python 数字证书模拟登录_用于生成WebService使用的数字证书及签署证书.python脚本...
- nfc sim android8,Android NFC相关资料之MifareClassic卡(读写)
- 认清当下的努力,可能毫无意义
- python建立空集合_「python」集合类型及操作
- 建立mysql服务器连接失败_解决项目启动无法创建到数据库服务器的连接错误
- java中ant是干什么的_Java_Ant详解(转载)
- 电话号码以185****3547显示demo
- 使用python进行re拆分网页内容
- MVC 发布到 windows2003遇到 'System.Web.WebPages.Razor 错误提示
- linux 使用ssr客户端_React从CSR到SSR:第一篇
- 怎么用计算机弹电脑病毒音乐,怎么制作电脑病毒?简单电脑病毒制作方法
- 根据前序序列和中序序列重建二叉树
- python做网络图_使用Python的networkx绘制精美网络图教程
- MacOS 软件 Adobe Illustrator 2022 - AI 安装使用详细教程
- Google怎么了?
- Unity入门操作_刚体 _012
- STM8L系统时钟及RTC设置
热门文章
- 阿里物联网iot 网关配置 gateway 与子设备
- php团购实现,团购网站的设计与实现(PHP,MySQL)(含录像)
- C语言程序AT24C64
- 串级PID及角度过零处理
- 带你全面解析Android框架体系架构view篇,全网疯传
- Echarts使用及动态加载图表数据 折线图X轴数据动态加载
- NOIP 2012 普及组 复赛 culture 文化之旅
- 微信小程序组件、web-view、h5之间交互
- RobotStudio仿真—Smart组件创建动态夹具
- 从Google Maglev到UCloud Vortex,如何造一个牛逼的负载均衡?