Python程序设计基础教程课件 第10章 文本文件_第1页
Python程序设计基础教程课件 第10章 文本文件_第2页
Python程序设计基础教程课件 第10章 文本文件_第3页
Python程序设计基础教程课件 第10章 文本文件_第4页
Python程序设计基础教程课件 第10章 文本文件_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

Python程序设计基础教程

第10章文本文件提纲文件概述Python的文件对象文本文件的操作文件和目录操作学习目标理解文件的作用和所扮演的角色了解文本文件和二进制文件的特点对文本文件进行读写进行文件和目录操作10.1文件概述文件文件的角色和重要性文件系统与存储文件在编程中的重要性文件的类型文本文件二进制文件文本文件和二进制文件保存数据的区别[例]假设分别用文本文件和二进制文件保存十进制整数100。文本文件:100

'100',即1个'1'和2个'0' '1'的编码为(49)10(110001)2,'0'的编码为(48)10(110000)2

打开文件时,再将编码转换为字符,便可以阅读

二进制文件:(100)10(1100100)2

保存相同的数据,文本文件需要3个字节,二进制文件只需要1个字节。0011000100110000001100000110010010.2文件对象文件对象Python通过文件对象来处理文件文件对象是对文件进行操作的接口:打开、关闭、读取和写入文件

文件对象是python的内置对象之一它是一种资源,由操作系统统一管理通过打开文件操作,系统以文件对象的形式将资源分配给正在运行的程序文件使用完毕后,要及时关闭以释放所占用的资源标准文件对象从标准输入设备(键盘)读取数据,并向标准输出设备(显示器)输出数据。标准输入/输出:操作系统自动提供给程序访问。在Python中,标准输入/输出也是作为文件对象提供给用户的:标准输入

sys.stdin,标准输出

sys.stdout,标准错误

sys.stderr。除了标准文件对象以外,程序要读写文件需要先以适当方式打开文件,获取文件对象,然后通过文件对象实现对文件的读写操作。最后关闭文件,释放资源。10.2.1文件打开和关闭file_object=open(file_path,

mode='r',

encoding=None,buffering=-1,...)file_path:被打开的文件名称(包括路径)mode:访问模式打开文件后的处理方式(右表)红色标记的方式可与其它方式组合使用默认值是'r'值说明r只读模式w只写模式a追加模式b二进制模式+读写模式e.g.

f=open('c.dat',

'rb')file_object=open(file_path,

mode='r',

encoding=None,

buffering=-1,...)buffering:缓冲区指定读写文件的缓存模式0:不缓存;1:缓存;大于1:指定缓冲区大小;小于0:使用默认缓冲区大小默认值:缓存模式encoding:编码文本文件的字符编码格式,默认编码方式取决于系统

encoding必须与指定要打开文件的字符编码一致,否则就不能正确打开文件

file_object=open(file_path,

mode='r',

encoding=None,

buffering=-1,...)open()函数返回一个文件对象利用该对象可进行各种文件操作文件对象的属性可访问文件打开的典型调用方法以只读模式打开文件要求文件已经存在,否则产生异常。1.文件在当前目录下f=open('grades.txt')2.用绝对路径方式 f=open(r'C:\Documents\Python\Examples\grades.txt')3.用相对路径方式 f=open('../grades.txt') ../表示当前目录的上一级目录 f=open('./grades.txt') ./表示当前目录

文件打开的典型调用方法(续)以只写模式打开文件f=open('a.txt',

'w')文件存在则清空文件内容,不存在则创建文件。以追加模式打开文件 f=open('a.txt',

'a')文件不存在则创建文件,否则置文件指针到文件尾。只能写文件。以读写模式打开文件 f=open('b.csv',

'a+')文件不存在则创建文件,否则置文件指针到文件尾。可以读写文件。文件打开的典型调用方法(续)指定字符编码打开文件文本文件可能使用不同编码保存数据。指定正确的编码格式能够确保文件内容被正确地读取和处理。 e.g.以只读方式打开UTF-8编码的文件data.txt: file=open('data.txt',

encoding='utf-8')

写入文件时,也要注意选择正确的编码格式。如果文件需要支持多语言或特殊字符,建议使用UTF-8编码。 file=open('data.txt',

'w',

encoding='utf-8')file_object.close(.)方法释放文件资源,将文件缓冲区中的数据写入文件,确保数据完整性并避免可能的内存泄漏#文件操作的标准步骤:打开-处理-关闭file=open('example.txt',

'r',

encoding='utf-8')#打开文件……#这里使用file进行文件操作file.close()#关闭文件10.2.2文件对象的属性属性说明文件的名称f.mode文件的访问模式f.encoding文件所使用的编码f.closed文件是否关闭示例file_path='example.txt'#打开文件供读取file=open(file_path)#获取文件名和打开模式print("文件名:",

)print("打开模式:",file.mode)#关闭文件file.close()#检查文件是否关闭print("文件已关闭:",file.closed)10.2.3三种文件操作方式模式一file=open(filename)

content=file.read()

file.close()

print(content)优缺点常规操作方式:三步;如有异常产生,程序运行不正常;同时资源不能释放.模式三withopen(filename)asfile:

content=file.read()

print(content)优缺点安全且简单的操作方式;自动进行资源管理;通常情况下的最佳选择.模式二try:

file=open(filename)

content=file.read()finally:

file.close()

print(content)优缺点即便产生异常,也能保证资源的释放;程序较繁琐.10.2.4文件对象的常用操作操作类型方法功能说明读fo.read([size])从文本文件中读取size个字节,默认读取所有内容,以字符串形式返回fo.readlines()从文本文件中读取所有行并返回列表,每行内容作为列表的一个元素fo.readline()从文本文件中读取一行内容,返回字符串写fo.write(s)向文本文件中写入字符串sfo.writelines(sl)把字符串列表sl中的所有字符串元素写入文本文件其它操作fo.seek(offset[,whence])移动文件读写指针到指定位置fo.tell()返回文件读写指针的当前位置fo.truncate([size])保留文件前size个字节的内容,删除其余内容。默认删除从文件指针当前位置到文件末尾的内容。fo.flush()把文件缓冲区的内容写入文件,并且不关闭文件fo.close()把文件缓冲区的内容写入文件,关闭文件,释放文件对象10.3文本文件的操作10.3.1读文件1.

read(size=-1)读取文件的size个字符,默认读取文件的全部内容file_path='example.txt'withopen(file_path)asfile: content=file.read()#读取文件的全部内容

print(content)withopen(file_path)asfile:#再次以只读方式打开文件

partial_content=file.read(100)#读取前100个字符 print(partial_content)读文件(续)2.

readlines(.)读取文件的所有行,返回列表,文件中每行内容(包括'\n')

列表的一个元素file_path='example.txt'withopen(file_path)asfile: lines=file.readlines()#读取文件所有行保存在列表lines中forlineinlines:#退出with结构之后,再处理从文件中读取的内容

print(line.strip())#去除行尾的换行符并输出每行内容

#print(line,end='')读文件(续)3.readline(.)读取文件中的一行内容,返回字符串file_path='example.txt'withopen(file_path)asfile: whileline:=file.readline():#逐行读取文件内容

print(line.strip())读文件(续)4.直接使用文件对象读取文件内容文件对象本身也是一个可迭代对象

可通过直接迭代来逐行处理文件内容file_path='example.txt'withopen(file_path)asfile:

forlineinfile:#逐行读取文件内容

print(line.strip()) withopen(file_path)asfile:

lines=list(file)#读取文件所有行保存在列表lines中

forlineinlines: print(line,end='')10.3.2写文件1.

write(s)将字符串s的内容写入文件由于write(.)方法并不会在行尾自动添加换行符,所以需要手动添加行换行符'\n'。file_path='output.txt'withopen(file_path,

'w')asfile:#以只写模式打开文件 file.write("Hello,

thisisanewline.\n")#写入第一行 file.write("Thisisanotherline.\n")#写入第二行写文件(续)2.

writelines(sl)将字符串列表sl中的所有元素写入文件列表lines中每个字符串元素均以'\n'结束,确保写入文件时行尾换行file_path='output.txt'withopen(file_path,'w')asfile: #将字符串列表写入文件 lines=["Line1\n","Line2\n","Line3\n"] file.writelines(lines)写文件(续)3.

print(*args,sep='',end='\n',file=None,flush=False)file参数为None,代表输出到sys.stdout,即标准输出设备(显示器)如果调用时指定file参数为一般文件对象,即可实现向文本文件写入内容由于print()函数默认在行尾添加换行符(end参数的默认值为'\n'),所以不需要在字符串末尾手动添加'\n'file_path='output.txt'withopen(file_path,'w')asfo: print("Hello,thisisanewline.",file=fo)#写入第一行 print("Thisisanotherline.",file=fo)#写入第二行10.3.3文件指针操作文件指针:指向文件中特定位置的标识符或指示器打开文件时,文件指针通常位于文件的开头,随着读写操作的进行,文件指针会向后移动,指示着当前的读写位置。通常是以字节为单位的偏移量,从文件的开头开始计算。fo.tell(.)获取文件指针的当前位置fo.seek(.)将文件指针移动到文件的特定位置,从而实现对文件内容的精确操作fo.seek(offset,

whence=0)offset偏移量,表示移动多少个字节。正值表示向文件尾部移动,负值表示向文件开头移动。whence起始位置:0-文件开头,1-当前位置,2-文件末尾。withopen('file.txt')asfile:file.seek(10)#移动指针到第10个字节处

content=file.read()print(content)示例file_path='example.txt'withopen(file_path)asfile:

content=file.read()#读取后,文件指针位于文件末尾

print(content)

file.seek(0)#将文件指针重新移动到文件开始位置 partial_content=file.read(100)#读取前100个字符 print(partial_content)fo.tell(.)获取当前读写位置相对于文件开头的偏移量withopen('file.txt')asfile:file.seek(5)#移动指针到第5个字节处

print(file.tell())#输出当前指针位置

content=file.read()print(content)10.3.4文件操作中的异常处理和错误检查进行文件操作时,异常处理是确保程序稳定性的重要部分(请参见本书第13章)。有效使用Python的异常处理机制,能够预先考虑文件处理过程中可能出现的错误情况并加以处理。对于文件操作,可能会遇到的异常包括:文件不存在(FileNotFoundError)、不支持的操作(UnsupportedOperation)、权限不足(PermissionError)等。同时使用with&try…finally…管理文件资源和异常处理在进行复杂的文件操作时,可同时使用with结构和try…finally…结构管理文件资源和异常处理,使得代码既具有自动资源管理的优点、又能捕获异常并加以处理:try: withopen('file.txt')asfile:……#这里使用file进行文件操作exceptFileNotFoundError: print("文件不存在")exceptUnsupportedOperation: print("不支持写操作")exceptPermissionError: print("权限不足")用增加程序逻辑的方式避免错误例如:在文件操作前检查文件是否存在,可以避免FileNotFoundErrorimportosfile_path='file.txt'ifos.path.exists(file_path):#检查文件是否存在

withopen(file_path)asfile:content=file.read()print(content)else:print("文件不存在")10.3.5文件读写实例两个文件读写的综合示例在这两个示例中,文件不仅是程序的数据来源,也是保存程序处理结果的方式。同时,这两个示例也充分利用了前面章节所学知识,如:列表、排序、字符串分割与连接、切片等,来解决实际问题。例一:问题描述[例]在文件hw_grades.csv中,保存了若干位同学某门课程的平时作业成绩(一行对应一位同学的作业成绩,均为整数)。要求对每位同学的作业成绩分别按升序排列,并将排序结果保存到文件hw_grades_sorted.csv当中。.csv文件是一种文本文件类型,可以用常见的文本编辑器打开编辑,如:Windows系统自带的记事本软件同时它也是一种简单的表格文件,可以用大多数表格软件打开编辑,如:Excelcsv文件中每行文本的各个数据之间均以逗号分隔,即,逗号为各列数据的分隔符例一:示例代码withopen('hw_grades.csv')asfo:

data=list(fo)#data=fo.readlines()result=[]forlineindata:

#对文件中每行字符信息

nums=line.strip().split(',')

#分割出各个整数字符串

nums=sorted(map(int,

nums))

#将每个整数字符串转换为整数后排序

nums=','.join(map(str,

nums))+'\n'

#重新构成以逗号分隔的字符串

result.append(nums)

#添加到结果列表withopen('hw_grades_n.txt','w')asfo:

fo.writelines(result)例二[例]把property.py中的代码,

在行首加上行号,

保存为文件property_n.py思考:若要求文件中的注释行和空行不算在内,

程序该如何编写?defcomment(fname):

withopen(fname,'r',encoding='UTF-8')asfile:

lines

=

[str(i)+")"

+

lineforI,

lineinenumerate(file,1)]

withopen(fname[:-3]

+

'_n.py','w',encoding='UTF-8')asfile:

file.writelines(lines)

if__name__=='__main__':

comment('property.py')程序运行前后.py文件的内容对比10.4文件和目录操作操作文件的不同层次读写文件内容:文件对象文件和目录操作:os,os.path文件的高级操作:shutil10.4.1OS(OperatingSystem)模块方法功能说明os.remove(path)删除文件os.rename(src,dst)重命名文件或目录os.mkdir(path)创建目录os.rmdir(path)删除空目录os.getcwd()获取当前工作目录os.chdir(path)改变当前工作目录os.listdir(path)返回指定目录下的所有文件和目录名os.path.exists(path)检查文件或目录是否存在os.path.isfile(path)检查给定路径是否为文件os.path.isdir(path)检查给定路径是否为目录示例:检查文件或目录是否存在importosfile_path='example.txt'ifos.path.exists(file_path):print(f"文件'{file_path}'存在")else:print(f"文件'{file_path}'不存在")10.4.2shutil(ShellUtility)模块方法功能说明shutil.copy(src,dst)复制文件或目录shutil.copy2(src,dst)复制文件或目录,并保留元数据shutil.copytree(src,dst)递归复制整个目录树shutil.move(src,dst)移动文件或目录shutil.rmtree(path)递归删除目录及其内容shutil.make_archive(base_name,format,root_dir,base_dir)创建压缩归档文件shutil.unpack_archive(filename,extract_dir)解压缩归档文件示例>>>importos,

shutil>>>os.chdir(r'D:/temp')#将当前目录置为D:/temp>>>shutil.make_archive('ex

温馨提示

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

最新文档

评论

0/150

提交评论