比尔云BierYun--阿里云最新优惠活动
阿里云优惠码丨阿里云代金券

Python学习(22)–文件操作1

Python学习(22)–文件操作1http://www.bieryun.com/2371.html

之前我们介绍到的数据类型,如列表,字典或者一个数字,字符等等。都是在程序运行时存储在内存中的,存储在内存中的数据不稳定,程序运行完后很难再找回。但是某些数据我们需要稳定的存储,如一个班级的成绩,这种随时可能被查阅的数据,最好就是存储在硬盘上的文件或者数据库中。这一节,我们就来介绍Python中对文件的操作。

(1)文件操作的基本流程

Python中对文件操作的流程基本为3个步骤:打开文件,文件操作,关闭文件。在Python中打开文件使用的内置函数为open(filename,flag),filename为文件的名字,flag指定对文件操作的权限,不指定flag的值默认为只读操作,该函数返回的是一个文件对象fileObject,我们可以对这个文件对象进行相应的操作;关闭文件就是调用fileObject的close()方法,关闭文件对象后就不能再对文件进行任何操作。如下:

 

[python] view plain copy

  1. fo=open(“message.txt”)#打开文件
  2. print(fo.read())#读取数据
  3. fo.close()#关闭文件
  4. print(fo.read())#关闭文件后读取数据

 

程序为打开一个文件,并读取文件中的数据。最后关闭文件,代码打印结果如下:

如上读取出message.txt中的文件内容为”hello world!”,当我们关闭文件后再次读取文件内容,报错为”I/O operation on closed file”,这是因为在文件关闭后对文件的操作权限也没有了。

(2)对文件的读写操作

之前我们介绍过,默认情况下内置函数open(filename,flag)对文件的操作权限为只读,当我们需要对文件进行写操作时,还需要获取相应的写权限。flag就是我们获取权限的参数,对文件对象fileObject进行写操作,使用的方法为write(string),即将数据string写入文件。如下:

 

[python] view plain copy

  1. fo=open(“test.txt”,“w+”)
  2. fo.write(“hello world”)
  3. fo.close()
  4. fo=open(“test.txt”)
  5. print(fo.read())

打印结果如下:

如上,我们打开文件test.txt,并对其进行读写操作(flag=”w+”,表示对文件读写的权限),接着把”hello world”写入文件,再次打开文件并读取,打印出的文件内容”hello world”。

更多有关文件操作的权限如下图:

如上,‘a’表示文件末尾写入内容的权限,r+可以对文件进行读写操作等等。

(3)文件指针

在Python中读取文件时,是靠指针来读取的,当读取一个单位的数据,指针就下移一个单位,再读取下一个单位的数据。下面我们来比较以下两个程序的不同,来解释Python文件指针的机制。如下:

 

[python] view plain copy

  1. fo=open(“test.txt”,“r+”)
  2. print(fo.read())
  3. fo.write(“nihao world”)
  4. fo.close()
  5. fo=open(“test.txt”)
  6. print(fo.read())
  7. fo.close()

 

在程序中,首先,以读写的方式打开test.txt文件,文件内容为”hello world”。在读取文件内容之后,向文件test.txt中写入”nihao world”,关闭文件后再读取文件。打印结果如下:

如上写入之前test.txt内容为”hello world”,写入之后内容为”hello worldnihao world”。这是因为,在读取文件之后,文件指针到达文件末尾,写入内容时,是从文件末尾开始写入的,所以写入”nihao world”后为”hello worldnihao world”。如下图形象的描述了这一过程:

再看如下例子:

 

[python] view plain copy

  1. fo=open(“test.txt”,“r+”)
  2. fo.write(“hi world”)
  3. fo.close()
  4. fo=open(“test.txt”)
  5. print(fo.read())
  6. fo.close()

 

这段代码与之前代码的不同就是,在往文件中写数据之前不会读取文件内容,同样以读写的方式打开文件test.txt,test.txt文件内容为”hi world”,写入文件的内容为”nihao world”。打印结果如下:

如上,在写入文件”hi world”后,文件内容为”hi worldrld”,这是因为在写文件之前并没有读文件,所以是从文件头开始写入的,实质上是”hi world”将”hello wo”这部分内容覆盖掉了。如下图:

(4)读写文件的常用方法

文件对象fileObject有很多读写文件的函数,调用这些函数可以高效方便的读写文件。下面我们就一一介绍这些函数。

①函数readline(),调用fileObject.readline()在读取文件时,会以行为单位,逐行的读取数据。每读取一行就返回一行的数据,直到返回空字符,读取结束。代码如下:

 

[python] view plain copy

  1. fo=open(“test.txt”)
  2. lineStr=fo.readline()
  3. while lineStr!=:
  4.     print(lineStr)
  5.     lineStr=fo.readline()

 

如上对test.txt逐行的读取,直到读取到的为空字符结束。test.txt中的数据如下:

打印结果如下:

②函数readlines(),调用fileObject.readlines(),也是逐行读取文件,但返回时是把所有行封装在列表中一次性返回。代码如下:

 

[python] view plain copy

  1. fo=open(“test.txt”)
  2. print(fo.readlines())

 

如上调用fileObject.readlines()读取test.txt文件。test.txt的数据如下:

代码打印结果如下:

③writelines(List)

fileObject的函数writelines(List)的功能为将序列List中的元素逐个写入文件,这样就可以一次性写入大量的数据,当数据量较大时可以调用函数writelines(List)。如下:

 

[python] view plain copy

  1. fo=open(“test.txt”,‘a’)
  2. l=[‘\none\n’,‘two\n’,‘three\n’]
  3. fo.writelines(l)
  4. fo.close()
  5. fo=open(“test.txt”)
  6. print(fo.read())

 

如上调用文件对象fo的函数writelines(list)分别将列表l中的3个元素”\none\n”,”two\n”,”three\n”写入test.txt中,test.txt文件原内容为,写入后读取结果如下:

④seek(offset,flag)

fileObject的一个控制文件指针的函数为seek(offset,flag),offset为文件指针移动的单位空间数,flag为标记位,控制着文件指针移动的方式,返回结果为一个整型数据,表示移动指针后指针所在的位置。具体的含义如下图:

代码例子如下:

 

[python] view plain copy

  1. fo=open(“test.txt”,“rb”)
  2. print(‘the position is:’,fo.seek(3,0))
  3. print(‘the position is:’,fo.seek(2,1))
  4. print(‘the position is:’,fo.seek(-2,2))
  5. print(fo.read())
  6. fo.close()

 

如上,分别使用3种方式控制文件指针移动的方式,test.txt文件的内容为”hello world”,

先分析下如上代码,fo.seek(3,0)表示文件指针从文件头部后移3个单位,移完后文件指针所在的位置为3,所以会返回3;fo.seek(2,1)表示文件指针从当前位置向后移动2个单位,当前位置是3,移动后文件指针为5;fo.seek(-2,2),表示文件指针从文件末尾向后移动-2个单位,即向前移动2个单位,”hello world”总长度为11,向前移动2个单位,文件指针位置为9.所以返回的结果分别为:3,5,9.打印结果如下:

⑤flush()函数

当我们向文件中写数据时,是先将文件内容写入内存缓冲区,然后再将数据写入文件所在的硬盘上。有的时候系统为了避免多次访问硬盘降低读写的速度,会建立一定大小的缓冲区,等待数据充满这个缓冲区再写入硬盘。文件对象fileObject的flush()函数功能为将内存缓冲区的数据立即写入文件,并清空缓冲区.如下代码:

 

[python] view plain copy

  1. fo=open(“test.txt”,“w+”)
  2. fo.write(“12345”)
  3. fo.seek(0,0)#返回文件头部
  4. fo.flush()#将内存缓冲区的数据写入文件
  5. print(“after flush:”,fo.read())
  6. fo.close()

 

如上,调用fileObject.flush()将数据立即写入文件。代码打印结果如下:

以上就是我们介绍的有关文件操作的基础,下一节我们将继续介绍文件目录的相关操作,敬请期待。

未经允许不得转载:比尔云 » Python学习(22)–文件操作1
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

强烈推荐

高性能SSD云服务器ECS抗攻击,高可用云数据库RDS