有些时候我们在处理数据之后就会想将我们的数据保存到文件中,实现数据的持久化。而不仅仅是输出到我们的集成开发环境的控制台上(直接打印在控制台上并不能够实现保存我们数据的功能,只要我们的集成开发环境已关闭,或者是电脑关机,那么我们打印出来的数据也会随之消失),例如我们在使用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--文件读取及写入操作相关推荐

  1. C语言的文件读取与写入操作

    学了一年的C语言了,现在回过头来做一下总结.并且博客开了挺长一段时间却没有谢什么实际的东西.现在做下总结,对之后的学习帮助应该挺大的.与大家共勉! 现在,我先来介绍一下C语言的文件读取与写入的原理和具 ...

  2. Verilog中testbench的设计,文件读取和写入操作

    1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应. 端口分为 input,output 和 inout 类型产生激励信号的时候, input 对应的端口应当 ...

  3. testbench的设计 文件读取和写入操作 源代码

    十大基本功之 testbench 1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应. 端口分为 input,output 和 inout 类型产生激励信号的 ...

  4. python对文件的读操作有哪些方法-Python中文件的读取和写入操作

    从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 wi ...

  5. python对文件的读操作方法有哪些-Python中文件的读取和写入操作

    从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 wi ...

  6. java创建读取文件_Java实现文件的创建、读取、写入操作-Fun言

    在日常的开发中,对文件的操作经常会有,所以今天教大家其中一种使用Java实现文件的创建.读取.写入操作 创建文件String filenameTemp = "D:\demo.txt" ...

  7. xml 和android脚本之家,Android利用Document实现xml读取和写入操作

    本文实例为大家分享了利用Document实现xml读取和写入操作,供大家参考,具体内容如下 首先先来介绍一下什么xml?xml是可扩展标记语言,他可以用来标记数据,定义数据类型.是一种允许用户对自己标 ...

  8. c#大文件读取和写入数据库

    c#大文件读取和写入数据库(带进度条的源代码) 最近一个项目需要将大文件写入和读取到数据库,觉得可能很多人也需要相关得东西,所以就将代码帖出来 protected int state = 0; //表 ...

  9. java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...

    文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术 如题:文件信息的批量导入-- 项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中 ...

  10. python数据框元素的性质_Pandas基础:文件读取与写入、Series和Dataframe、常用基本函数、排序...

    import pandas as pd import numpy as np 查看Pandas版本 pd.__version__ 一.文件读取与写入 1.读取 (a)csv格式 df = pd.rea ...

最新文章

  1. access下如何配置两个vlan_【新华三】网络工程师 H3C如何配置VLAN-trunk 二层隔离技术...
  2. [PHP打野] 对pear-FSM的研究(一)基本了解
  3. 你所不知道的Android Studio调试技巧
  4. python 数字证书模拟登录_用于生成WebService使用的数字证书及签署证书.python脚本...
  5. nfc sim android8,Android NFC相关资料之MifareClassic卡(读写)
  6. 认清当下的努力,可能毫无意义
  7. python建立空集合_「python」集合类型及操作
  8. 建立mysql服务器连接失败_解决项目启动无法创建到数据库服务器的连接错误
  9. java中ant是干什么的_Java_Ant详解(转载)
  10. 电话号码以185****3547显示demo
  11. 使用python进行re拆分网页内容
  12. MVC 发布到 windows2003遇到 'System.Web.WebPages.Razor 错误提示
  13. linux 使用ssr客户端_React从CSR到SSR:第一篇
  14. 怎么用计算机弹电脑病毒音乐,怎么制作电脑病毒?简单电脑病毒制作方法
  15. 根据前序序列和中序序列重建二叉树
  16. python做网络图_使用Python的networkx绘制精美网络图教程
  17. MacOS 软件 Adobe Illustrator 2022 - AI 安装使用详细教程
  18. Google怎么了?
  19. Unity入门操作_刚体 _012
  20. STM8L系统时钟及RTC设置

热门文章

  1. 阿里物联网iot 网关配置 gateway 与子设备
  2. php团购实现,团购网站的设计与实现(PHP,MySQL)(含录像)
  3. C语言程序AT24C64
  4. 串级PID及角度过零处理
  5. 带你全面解析Android框架体系架构view篇,全网疯传
  6. Echarts使用及动态加载图表数据 折线图X轴数据动态加载
  7. NOIP 2012 普及组 复赛 culture 文化之旅
  8. 微信小程序组件、web-view、h5之间交互
  9. RobotStudio仿真—Smart组件创建动态夹具
  10. 从Google Maglev到UCloud Vortex,如何造一个牛逼的负载均衡?