Python语言实用教程第7章-文件课件_第1页
Python语言实用教程第7章-文件课件_第2页
Python语言实用教程第7章-文件课件_第3页
Python语言实用教程第7章-文件课件_第4页
Python语言实用教程第7章-文件课件_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 程序运行时变量、序列、对象等中的数据暂时存储在内存中,当程序终止时它们就会丢失。为了能够永久地保存程序相关的数据,就需要将它们存储到磁盘或光盘中的文件里。这些文件可以传送,也可以后续被其他程序使用。文件是计算机中程序、数据的永久存在形式。对文件数据的输入输出操作是信息管理的不可或缺的基本要求。第7章 文件 学习重点或难点: 文件基本概念 文件操作 文件输入输出 文件输入输出操作是几乎所有语言都具有的功能,学习本章后你将具备信息管理的基本技能了。第7章 文件 7.1 文件基本概念 7.2 文件打开和关闭 7.3 文件操作 7.4 文件夹的操作 7.5 序列化和反序列化 7.6 应用实例第7章

2、文件7.1 文件基本概念 所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。例如源程序文件、可执行文件、数据文件、库文件等。 文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。 从不同的角度,可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。7.1 文件基本概念7.1 文件基本概念 通常把显示器定义为标准输出文件,文件名为sys.stdout,一般情况下在屏幕上显示有关信息就是向标准输出文件输出。如前面经常使用的print函数就是这类输出。 键盘通常被指定为标准输入文件,文件名为sys.stdin,从键盘上输入就意味着从标准输入文件

3、上输入数据。input函数就属于这类输入。 标准错误输出也是标准设备文件,文件名为sys.stderr。7.1 文件基本概念 从文件编码的方式来看,文件可分为编码(ASCII码)文件和二进制码文件两种。ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。 二进制文件是按二进制的编码方式来存放文件数据内容的一类文件。 二进制文件虽然也可在屏幕上显示,但其内容一般无法读懂。然而,二进制文件占用存储空间少,在进行读、写操作时不用进行编码转换,效率要高。为此,这类文件及其操作也很常用。7.2 文件的打开和关闭 在2.3节已经介绍如何向标准输入文件(键盘

4、,sys.stdin)和输出文件(屏幕,sys.stdout)进行读写。下面来介绍如何读写实际的数据文件。Python提供了必要的函数或方法进行默认情况下的文件基本操作。用file对象可以完成大部分的文件操作。7.2.1 打开文件open()方法 在读写磁盘文件前,必须先用Python内置的open()函数打开一个文件,创建一个file对象。 语法为:=open(file_name , access_mode=r , buffering=-1, encoding=None , errors=None, newline=None , closefd=True, opener=None )7.2.

5、2 File对象的属性 一个文件被打开后,有一个file对象,可以得到表7-2有关文件的各种信息。属性描述file.closed如果文件已被关闭返回True,否则返回False。file.mode返回被打开文件的访问模式。返回文件的名称。file.softspace如果用print输出后必须跟一个空格符,则返回False;否则返回True。Python 3.x已不支持。如下示例:fo = open(foo.txt, wb) # 打开一个文件print(Name of the file: , ) # Name of the file: foo.txtprint(C

6、losed or not : , fo.closed) # Closed or not : Falseprint(Opening mode : , fo.mode) # Opening mode : wbprint(Softspace flag : , fo.softspace) # Softspace flag : 0 # Python 关闭文件close()方法 file对象的close()方法刷新缓冲区里任何还没写入文件的信息,并关闭该文件,这之后便不能再进行写入。 当一个文件对象的引用被重新指定给另一个文件时,Python会关闭之前的文件。用close()方法关闭文件

7、是一个很好的习惯。 语法: fileObject.close(); 例如: fo = open(foo.txt, wb) # 打开一个文件 print(Name of the file: , ) # Name of the file: foo.txt fo.close() # 关闭打开的文件 当处理一个文件对象时, 使用 with 关键字是非常好的方式。在结束后, 它会帮你正确的关闭文件。而且写起来也比try -finally语句块要简短: with open(/tmp/workfile,r) as f: . read_data = f.read() f.closed # tru

8、e7.3 文件操作 file对象提供了一系列方法,能让文件访问更轻松。来看看如何使用read()和write()方法来读取和写入文件。7.3.1 写入操作write()方法1、f.write() write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。Write()方法不在字符串的结尾添加换行符(n)。 语法:fileObject.write(string); # 被传递的参数string是要写入到文件的内容例如:fo = open(/tmp/foo.txt, wb) # 打开一个文件fo.write(Python is a

9、great language. Yeah its great!n); fo.write(bytes(Python language.,encoding=”utf-8”); fo.close() # 关闭打开的文件7.3.1 写入操作write()方法2、f.writelines() writelines()的语法:f.writelines(seq),把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是如实地写入,不会在每行后面加上任何东西。7.3.2 读取操作read()方法1、f.read() read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可

10、以是二进制数据,而不是仅仅是编码(ASCII码)文字。 语法:fileObject.read(size); 这里,被传递的参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入size,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。例如:读取上面创建的文件foo.txt中的内容。fo = open(/tmp/foo.txt, r+) # 打开一个文件str = fo.read(10); print(Read String is : , str) fo.close() # 关闭打开的文件7.3.2 读取操作read()方法2、f.readline() f.re

11、adline() 会从文件中读取单独的一行,换行符为 n。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。语法:fileObject.readline(size); #读一行,如果定义了size,则读取一行中size长度的部分。 f.readline() # This is the first line of the file.n # 设是第1行内容 f.readline() # Second line of the filen # 设是第2行内容 f.readline() # 7.3.2 读取操作read()方法3、f.readlines() f.readlin

12、es() 将返回该文件中包含的所有行。 语法:f.readlines(size) 把文件每一行作为一个list的一个成员,并返回这个list。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。 f.readlines()This is the first line of the file.n, Second line of the filen 另一种方式是迭代一个文件对象然后读取每行: for line in f: print(line, end= ) 这个方法很简单, 但是并没有提供一个很好的控制。 因为两者的处理机制不同, 最好不要混用。7.3.3 定位与

13、移动操作方法 tell()方法给出文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。seek(offset ,from)方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。 如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。 如下示例,用到上面创建的文件foo.txt。fo = open(/tmp/foo.txt, r+) # 打开一个文件str = fo.read(10); print(Read String is :

14、 , str) position = fo.tell(); # 查找当前位置print(Current file position : , position) # Current file position : 10position = fo.seek(0, 0); # 把指针再次重新定位到文件开头str=fo.read(10); print(Again read String is:, str) fo.close() # 关闭打开的文件7.3.4 复制、重命名与删除1、copyfile()复制文件方法 Python的shutil模块提供了执行文件或目录操作的方法,比如复制文件。 要使用这个模

15、块,必须先导入它,然后可以调用相关的各种功能。可以用shutil.copyfile()方法复制文件,需要提供原文件与复制成的新文件为参数。 语法:shutil.copyfile(oldfile,newfile) 下例将一个已经存在的文件test1.txt复制为test2.txtimport shutil; shutil.copyfile(test1.txt,test2.txt) # 复制文件test1.txt为test2.txt7.3.4 复制、重命名与删除2、重命名文件 Python的os模块提供了帮助执行文件处理操作的方法,比如重命名和删除文件。 rename()方法 语法: os.ren

16、ame(current_file_name, new_file_name) rename()方法需要两个参数,当前的文件名和新文件名。 下例将重命名一个已经存在的文件test2.txt。 import os; os.rename( test2.txt, test3.txt ) # 重命名文件test2.txt到test3.txt7.3.4 复制、重命名与删除3、remove()删除方法 可以用remove()方法删除文件,需要提供要删除的文件名作为参数。 语法: os.remove(file_name) 下例将删除一个已经存在的文件test3.txt。 import os; os.remove

17、(text3.txt) # 删除一个已经存在的文件test3.txt7.4 文件夹的操作 所有文件都包含在各个不同的目录下,不过Python也能轻松处理(第1章已有介绍)。os模块或shutil模块中有许多方法能来创建、更改和删除目录。7.5 序列化和反序列化 Python的pickle模块实现了基本的数据序列化和反序列化。 通过pickle模块的序列化操作能够将程序中运行的对象信息永久保存到文件中。 通过pickle模块的反序列化操作,能够从文件中创建上一次程序保存的对象。 基本接口:pickle.dump(obj,file,protocol) 有了pickle这个对象,就能对file以读取

18、的形式打开:x=pickle.load(file)说明:从file中读取一个字符串,并将它重构为原来的Python对象。file:类文件对象,有read()和readline()接口7.5 序列化和反序列化【例7-1】 使用pickle模块将数据对象保存到文件。import pickledata1=a:1,2.0,3,4+6j, b:(string,uUnicode string), c:Noneselfref_list = 1, 2, 3selfref_list.append(selfref_list)output = open(data.pkl, wb)pickle.dump(data1, output) # Pickle字典使用默认的0协议pickle.dump(selfref_li

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论