《Python程序设计》课件-第7讲 文件与数据格式化_第1页
《Python程序设计》课件-第7讲 文件与数据格式化_第2页
《Python程序设计》课件-第7讲 文件与数据格式化_第3页
《Python程序设计》课件-第7讲 文件与数据格式化_第4页
《Python程序设计》课件-第7讲 文件与数据格式化_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

第7讲文件与数据格式化(1)文件的基础操作文件与目录管理学习目标本讲要点7.1文件概述文件:操作系统管理和存储数据的一种方式文件标识:类似于程序中使用的变量,每个文件也有唯一确定的标识,以便识别和引用文件。文件标识的组成:路径、主文件名、扩展名、路径分隔符缺省路径名:当前目录下的文件标识符可以缺省路径名,如:file.txt,表示file.txt是与当前程序同一个目录下的文件。7.1文件概述E:\Python38\python.exe

——Windows路径分隔符“\”路径主文件名扩展名路径分隔符:Linux中使用"/",Windows中使用"\"(也兼容"/"),由于Python中的"\"常用于转义字符,因此作为文件标识中路径分隔符时需要进行特殊处理:(1)用转义字符"\\"来表示"\";(2)用"/"代替"\";(3)使用Raw字符串,格式为:r'd:\test\newfile.txt',Raw字符串不解析转义字符,常用于文件标识7.1文件概述E:\Python38\python.exe

——Windows路径分隔符“\”路径主文件名扩展名7.1文件概述文件类型:根据数据的逻辑存储结构,文件类型分为文本文件和二进制文件。(1)文本文件:根据字符编码保存文本数据的文件,常见字符编码包括ASCII、UTF-8、GB2312等,可以直接使用“记事本”进行读写,如python源代码文件。(2)二进制文件:保存数据的二进制代码,将数据在内存中的存储形式复制到文件中。不能使用“记事本”正常读写,通常存储图片、音频、视频、应用程序等数据。注意:二进制文件和文本文件这两种类型的划分基于数据逻辑存储结构而非物理存储结构,计算机中的数据在物理层面都以二进制形式存储。多学一招:标准文件标准文件Python的sys模块中定义了3个标准文件,分别为:(1)stdin(标准输入文件),对应标准输入设备——键盘(2)stdout(标准输出文件),对应标准输出设备——显示器(3)stderr(标准错误文件),对应标准输出设备——显示器。在解释器中导入sys模块后,便可对标准文件进行操作。多学一招:标准文件标准文件importsysfile=sys.stdoutfile.write("hello")示例7.2文件的基础操作7.2文件的基本操作文件的打开、关闭与读写是文件的基础操作,任何更复杂的文件操作都离不开这些操作。7.2.1文件的打开与关闭1.打开文件——内置函数open()语法格式:myfile=open(file,mode='r',encoding=None)myfile:自定义标识符,是引用文件对象的变量,open()函数返回一个文件对象file:要打开的文件的标识,文件名。mode:表示文件读写模式的字符串,默认为'r',还有'w'、'a'、'b'等。encoding:设置字符编码,默认为None。【参数说明】完整格式:open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)7.2.1文件的打开与关闭1.打开文件——内置函数open()【关于mode参数】模式字符的含义:r:以只读方式打开文件(mode参数的默认值)。readingw:只写方式,创建新文件,若文件存在,则原文件被覆盖。writinga:只写、追加方式打开文件,文件存在则追加,不存在则创建新文件。appendingx:只写、创建新文件,若文件存在,则报错(exclusive—专有的)t:按文本格式读写文件,默认方式。textb:以二进制形式打开文件。binary+:以读写模式打开文件(可读可写)t,b可与r,w,a,x组合使用+必须与r,w,a组合使用缺省时默认为rt7.2.1文件的打开与关闭1.打开文件——内置函数open()打开模式名称描述r/rb只读模式以只读的形式打开文本文件/二进制文件,若文件不存在或无法找到,文件打开失败w/wb只写模式以只写的形式打开文本文件/二进制文件,若文件已存在,则重写文件,否则创建新文件a/ab追加模式以只写的形式打开文本文件/二进制文件,只允许在该文件末尾追加数据,若文件不存在,则创建新文件r+/rb+读取(更新)模式以读/写的形式打开文本文件/二进制文件,若文件不存在,文件打开失败

w+/wb+写入(更新)模式以读/写的形式打开文本文件/二进制文件,若文件已存在,则重写文件a+/ab+追加(更新)模式以读/写的形式打开文本/二进制文件,只允许在文件末尾添加数据,若文件不存在,则创建新文件总结规律:7.2.1文件的打开与关闭file1=open('E:\\a.txt') #以只读方式打开E盘的文本文件a.txtfile2=open('b.txt','w') #以只写方式打开当前目录的文本文件b.txtfile3=open('c.txt','w+') #以读/写方式打开文本文件c.txtfile1=open('d.jpg','wb+') #以读/写方式打开二进制文件d.jpg示例1.打开文件——内置函数open()7.2.1文件的打开与关闭若待打开的文件不存在,文件打开失败,程序会抛出异常,并打印错误信息。------------------------------------------------------------------------FileNotFoundErrorTraceback(mostrecentcalllast)<ipython-input-5-23b0bb5a2ffc>in<module>---->1file1=open("b.txt")FileNotFoundError:[Errno2]Nosuchfileordirectory:'b.txt'示例1.打开文件——内置函数open()7.2.1文件的打开与关闭2.关闭文件(1)close()方法——文件对象的内置方法file.close()示例关闭文件的方法有2种:close()方法、with语句实现文件的自动关闭。7.2.1文件的打开与关闭2.关闭文件(2)with语句——文件自动关闭withopen('a.txt')asf:pass示例知识拓展pass语句:空语句,为了保持程序结构完整性,起占位作用为什么要及时关闭文件?思考:为什么要及时关闭文件?1.打开的文件占用系统资源;2.操作系统为每个进程打开的文件数量是有限的;3.关闭文件能将“写缓存”中的数据及时同步的磁盘,若程序因异常关闭,可能产生数据丢失。思考:为什么要及时关闭文件?7.2.2文件的读写Python提供了一系列读写文件的方法,包括读取文件的read()、readline()、readlines()方法和写文件的write()、writelines()方法,针对文本文件和二进制文件在读写时存在一定的差异,下面分别从文本文件和二进制文件角度分别介绍如何读写文件。7.2.2文件的读写(1)读取文件——read()方法read([size]):将从文件指针位置(当前位置)开始读取size个字符,作为一个字符串返回。size缺省或为负数时,读取所有字符如:read()、read(10)、read(-1)withopen('file.txt',mode='r')asf:print(f.read(2)) #读取两个字节的数据

print(f.read()) #读取剩余的全部数据示例1.文本文件的读写7.2.2文件的读写(2)读取文件——readline()方法readline():读取整行(包括"\n"字符),将从当前位置开始到下一个换行符号'\n'的内容,作为一个字符串返回。readline(size):从当前位置开始的size个字符内的一行withopen('file.txt',mode='r',encoding='utf-8')asf:print(f.readline())#读第1行输出print(f.readline())#读第2行输出示例1.文本文件的读写7.2.2文件的读写(3)读取文件——readlines()方法readlines():将从文件指针位置开始到文件末尾的内容作为一个列表返回,每一行的字符串作为一个列表元素,包括换行符'\n'readlines(size):返回从当前位置开始size个字符所在的整行,包括'\n'withopen('file.txt',mode='r',encoding='utf-8')asf:print(f.readlines())#使用readlines()方法读取数据示例1.文本文件的读写7.2.2文件的读写注意:read()和readlines()方法都可一次读取文件中的全部数据(参数缺省时),但因为计算机的内存是有限的,若文件较大,read()和readlines()的一次读取便会耗尽系统内存,所以这两种操作都不够安全。为了保证读取安全,通常多次调用read(size)、readline()方法,采用循环遍历的方法读取。7.2.2文件的读写文件遍历一:for循环f=open('file.txt')forlineinf:print(line,end='')#循环遍历读取文件内容f.close()1.文本文件的读写文件遍历二:readline()withopen('file.txt')asf:whileTrue:

line=f.readline()ifnotline:#返回值为''时退出循环

breakprint(line,end='')文件遍历三:read()withopen('file.txt')asf:whileTrue:s=f.read(20)#读取指定字符数

ifnots:#返回值为''时退出循环

breakprint(s,end='')7.2.2文件的读写(4)写文件——write()方法write(xstring):在当前位置写入xstring指定的字符串,返回本次写入的数据的字符数。写文件,open()函数的mode可以用w、a、a+等string="实训7:文件与数据格式化的应用"withopen('write_file.txt',mode='w',encoding='utf-8')asf:size=f.write(string)

#写入字符串

print(size)

#打印字节数示例1.文本文件的读写7.2.2文件的读写(5)写文件——writelines()方法writelines(xlist):将列表中的数据合并为一个字符串写入到当前位置。该方法没有返回值(xlist也可以是一个字符串)。xlist=["\n一、实训目的\n","1、了解计算机中文件的类型\n","2、掌握文件的基本操作,熟练管理文件与目录\n","3、了解数据维度的概念,掌握常见的数据格式."]withopen('write_file.txt',mode='a',encoding='utf-8')asf:f.writelines(xlist)

#写入字符串示例1.文本文件的读写多学一招:字符与编码文本文件支持多种编码方式,不同编码方式下字符与字节的对应关系不同,常见的编码方式以及字符与字节的对应关系如表所示。编码方式语言字符数字节数ASCII中文12英文11UTF-8中文13英文11Unicode中文12英文12GBK中文12英文111.文本文件的读写7.2.3文件的定位读写read()方法第1次读取了2个字符,第2次从第3个字符开始读取了剩余字符。1.文本文件的读写文件指针——当前位置在文件的一次打开与关闭之间进行的读写操作是连续的,程序总是从上次读写的位置继续向下进行读写操作。每个文件对象都有一个称为“文件读写位置”的属性,该属性会记录当前读写的位置,也称文件指针文件打开时读写位置默认为0,即在文件首部。7.2.3文件的定位读写1.文本文件的读写Python提供了一些获取与定位文件读写位置的方法,以实现文件的定位读写。tell()——获取文件当前的读写位置。seek()——定位文件的读写位置。7.2.3文件的定位读写1.文本文件的读写(6)tell()方法——返回文件当前的读写位置,以字节为单位,每个汉字占用几个字节与编码方式相关withopen('file.txt')asf:print(f.tell()) #获取文件读写位置

print(f.read(5)) #利用read()方法移动文件读写位置

print(f.tell()) #再次获取文件读写位置示例7.2.3文件的定位读写说明:read(5)读取文本文件时,以字符为单位移动指针,GBK编码一个汉字是2字节(对于二进制文件,总是以字节为单位移动指针)。1.文本文件的读写seek(offset):将文件指针移动到第n+1个字节(注意中文汉字的定位异常)offset:表示偏移量,即读写位置需要移动的字节数。返回值:seek()方法调用成功后会返回当前读写位置(7)seek()方法——可控制文件的读写位置7.2.3文件的定位读写1.文本文件的读写2.seek()方法withopen('file.txt')asf:print(f.tell()) #获取文件读写位置

print(f.read(5)) #利用read()方法移动文件读写位置

print(f.tell()) #再次获取文件读写位置示例7.2.3文件的定位读写1.文本文件的读写二进制文件读写与文本文件读写基本相同,不同之处在于:(1)open()函数打开文件时,mode参数设置为rb、wb、ab、ab+、等,以二进制模式也可以打开文本文件,不能设置encoding参数;(2)读写时均以字节为单位,读取返回值为bytes对象,写入的数据也必须是bytes对象;(3)seek()方法可以相对于当前位置和文件尾设置偏移量。7.2.2文件的读写2.二进制文件的读写withopen('write_file.txt',mode='rb')asf:f.seek(3)print(f.read(3)) #读取3个字节,并输出示例二进制文件的写操作7.2.2文件的读写2.二进制文件的读写withopen('write_file3.txt',mode='wb')asf:#下句将一个字符串转换成指定字符编码的bytes对象

xbytes=bytes('第七讲',encoding='utf-8')

f.write(xbytes)

#写一个字节序列对象示例seek(offset[,from]):将文件指针移动到第n+1个字节offset:表示偏移量,即读写位置需要移动的字节数。from:用于给offset定义一个参数,表示要从哪个位置开始偏移,可取值为0、1、2,默认为0,文本文件只能是0。0:表示文件开头。1:表示使用当前读写位置(二进制文件)。2:表示文件末尾(二进制文件)。返回值:seek()方法调用成功后会返回当前读写位置(3)seek()方法的不同7.2.3文件的定位读写2.二进制文件的读写seek()定位二进制文件:withopen('file.txt','rb')asf:f.seek(5,0)f.seek(3,1)示例7.2.3文件的定位读写2.二进制文件的读写7.3文件与目录管理文件操作通常都会涉及到目录操作,对于用户而言,文件和目录以不同的形式展现,但对计算机而言,目录是一种特殊的文件,它存储当前目录中的子目录和文件的相关信息。Python的os模块提供了目录操作的函数。利用这些函数可以实现文件删除、重命名,创建/删除目录、获取当前目录、更改默认目录、获取目录列表等操作。7.3文件与目录管理管理文件与目录获取当前目录——os.getcwd()更改默认目录——os.chdir(路径名)创建/删除目录——os.mkdir(目录名)/os.rmdir(目录名)获取目录列表——os.listdir(目录/路径)删除文件——os.remove(文件名)文件重命名——os.rename(原文件名,新文件名)7.3文件与目录管理7.3文件与目录管理1.获取当前目录——os.getcwd()importos

print(os.getcwd())#F:\pythons2.更改默认目录——os.chdir(路径名)importosprint(os.getcwd())#F:\pythonsos.chdir("f:/eclipse")print(os.getcwd())#f:\eclipse3.创建/删除目录——os.mkdir(目录名)/os.rmdir(目录名)os.mkdir('test/txt')os.rmdir('test/txt')7.3文件与目录管理4.获取目录名列表——os.listdir(目录/路径)importosprint(os.listdir())print(os.listdir('test'))5.删除文件——os.remove(文件名)os.remove('write_file.txt')7.4精彩实例本实例要求编写程序,实现一个具备备份文件与文件夹功能的备份工具。问题讨论:1.如何实现文件复制?读取原文件---写到目标文件2.使用文本文件还是二进制文件形式?7.4.1信息安全策略——文件备份7.4.1信息安全策略——文件备份拷贝文件的函数定义:deffile_backup(source,target):

#source是要备份的文件名,target为目标文件夹

file_back=source.split('/')[-1]

withopen(source,mode='rb')asfile_data:#以二进制读的形式打开源文件

new_path=target+'/'+file_back#生成目标文件名

#创建新文件

,以只读的方式打开

withopen(new_path,'wb')asfile_back:#以二进制写的形式打开目标文件

#遍历备份源文件内容到新文件中

whileTrue:

data=file_data.read(1024)#每次读取1024个字节

ifnotdata:

break

file_back.write(data)定义源文件复制函数:backupfile(源文件,目标目录)定义目录备份函数:backup(源路径,目标目录)——递归函数,如果源路径是文件则是调用backupfile(),如果源路径是目录,则遍历它的子目录,对子目录文件递归复制7.4.1信息安全策略——文件备份本实例要求编写程序,实现用户注册、登录、修改密码、注销功能(要求程序使用文件存储用户的账户信息)。7.4.2用户账户管理7.4.2用户账户管理用户信息文件:infor.txt,用于存放用户信息,每个用户信息包含账号与密码[{'id':'lucky','pwd':'123'},{}]定义类型转换函数:convert_data(),将文件中的数据读取出来,转换成字典列表查询用户:从字典中查询,用户输入账号,如果存在则失败提示;如果不存在则输入密码写入文件:将账号和密码添加到字典列表,将字典转换成字符串写入文件7.6本章小结第7讲文件与数据格式化(2)数据维度与数据格式化学习目标本讲要点7.5数据维度与数据格式化计算机处理数据时,为了提高处理效率,总是将数据按一定的格式来组织。数据的组织格式表明数据之间的基本关系和逻辑,进而形成“数据组织维度”。根据数据关系的关联参数个数的不同,可将数据组织分为一维数据、二维数据和多维(高维)数据。具有1个关联参数的一组线性数据,如:一维列表一维元组集合等一维数据具有2个关联参数的表格数据,如:矩阵二维列表二维元组二维数组二维数据有3个及以上关联参数的数据,如:HTMLJSON多维字典多维数据7.5.1基于维度的数据分类示例成都,杭州,重庆,武汉,苏州,西安,天津,南京,郑州,长沙,沈阳,青岛,宁波,东莞,无锡一维数据二维数据7.5.1基于维度的数据分类示例{'高三一班成绩':[{'姓名':'李红','语文':124,'数学':120,'英语':82,'理综':186},{'姓名':'张兰','语文':126,'数学':113,'英语':90,'理综':260}],'高三二班成绩':[{'姓名':'张三','语文':90,'数学':120,'英语':120,'理综':245},{'姓名':'李四','语文':110,'数学':95,'英语':134,'理综':188},{'姓名':'王五','语文':102,'数学':112,'英语':117,'理综':212}]}多维数据7.5.1基于维度的数据分类示例{'高三一班成绩':[{'姓名':'李红','语文':124,'数学':120,'英语':82,'理综':186},{'姓名':'张兰','语文':126,'数学':113,'英语':90,'理综':260}],'高三二班成绩':[{'姓名':'张三','语文':90,'数学':120,'英语':120,'理综':245},{'姓名':'李四','语文':110,'数学':95,'英语':134,'理综':188},{'姓名':'王五','语文':102,'数学':112,'英语':117,'理综':212}]}多维数据7.5.1基于维度的数据分类数据通常存储在文件中。为了方便后续的读写操作,数据通常要按照约定的组织方式进行存储。数据存储7.5.2一二维数据的存储与读写一维数据呈线性排列,一般用特殊字符分隔,例如:使用空格分隔:成都杭州重庆武汉苏州西安天津使用逗号分隔:成都,杭州,重庆,武汉,苏州,西安,天津使用&分隔:成都&杭州&重庆&武汉&苏州&西安&天津一维数据的存储需要注意以下几点:同一文件或同组文件一般使用同一分隔符分隔。分隔数据的分隔符不应出现在数据中。分隔符为英文半角符号,一般不使用中文符号作为分隔符。7.5.2一二维数据的存储与读写通常采用逗号分隔一维数据存储7.5.2一二维数据的存储与读写例:列表数据的写入与读取1、编程将列表[5,3,6,7]写入文件list.txt2、编程将list.txt中的数据读入一个列表中写入文件思路分析:(1)定义列表(2)打开文件list.txt用于写(3)遍历列表,将数据转换成字符串写入文件,每写一个数据后再写一个','号读取文件思路分析:(1)打开文件list.txt用于读(2)读取文件数据,用split(',')分隔为字符串列表(3)将字符串列表转换成整数列表,使用条件列表推导式一维数据读写案例7.5.2一二维数据的存储与读写一维数据读写案例二维数据可视为多条一维数据的集合,当二维数据只有一个元素时,这个二维数据就是一维数据。CSV(Comma-SeparatedValues,逗号分隔值):国际上通用的一种二维数据存储格式。CSV格式规范:以纯文本形式存储表格数据文件的每一行对应表格中的一条数据记录,行尾标记'\n'每条记录由一个或多个字段组成字段之间使用逗号”,“(英文、半角)分隔7.5.2一二维数据的存储与读写二维数据存储将如下内容存入文件score.csv姓名,语文,数学,英语,理综刘婧,124,137,145,260张华,116,143,139,263邢昭林,120,130,148,255鞠依依,115,145,131,240黄丽萍,123,108,121,235赵越,132,100,112,2107.5.2一二维数据的存储与读写二维数据存储案例字符串写入将如下内容存入文件score.csv姓名,语文,数学,英语,理综刘婧,124,137,145,260张华,116,143,139,263邢昭林,120,130,148,255鞠依依,115,145,131,240黄丽萍,123,108,121,235赵越,132,100,112,2107.5.2一二维数据的存储与读写二维数据存储案例列表写入Windows平台中CSV文件的后缀名为.csv,可通过OfficeExcel或记事本打开Python在程序中读取.csv文件后,一般以二维列表形式存储其中内容将文件中的数据读取到列表对象中strlist=[]#存储读取数据列表f=open('score1.csv',encoding='gbk')forlineinf:line=line.replace("\n",'')#删除行尾换行符

line=line.split(',')#每行分隔为字段数据列表

strlist.append(line)#向列表中填加一行f.close()print(strlist)7.5.2一二维数据的存储与读写二维数据读取要求:将文件中的数据读取到列表对象中,计算总分之后写入另一个文件姓名,语文,数学,英语,理综刘婧,124,137,145,260张华,116,143,139,263邢昭林,120,130,148,255鞠依依,115,145,131,240黄丽萍,123,108,121,235赵越,132,100,112,2107.5.2一二维数据的存储与读写二维数据处理姓名,语文,数学,英语,理综,总分刘婧,124,137,145,260,666张华,116,143,139,263,661邢昭林,120,130,148,255,653鞠依依,115,145,131,240,631黄丽萍,123,108,121,235,587赵越,132,100,112,210,554思路:从score.csv中逐行读取

处理

写入totalScore.csv文件中f=open('score1.csv',encoding='gbk')f_new=open('totalScore.csv',mode='w',encoding='gbk')index=0#行号forlineinf:#源文件line=line.replace("\n",'')#删除行尾换行符

total=0#总分变量

ifindex==0:#如果第1行,尾部填加“总分”字段

line=line+",总分\n"else:#如果不是第1行,则计算总分,并加到行尾

new_line=line.split(',')#拆分成字段的列表

forxinnew_line:#遍历求和

ifx.isdigit():total+=int(x)#如果是数字,则变为整数累加

line=line+','+str(total)+'\n'#将总分追加到这一行末尾

f_new.write(line)#写入到新文件中

index+=1#处理完一行数据,行号增1f.close()f_new.close()7.5.2一二维数据的存储与读写二维数据处理高维数据一般采用字典形式进行格式化。网络平台上传递的数据大多是高维数据,JSON是网络中常见的高维数据格式。JSON格式的数据遵循以下语法规则:数据存储在键值对(key:value)中,例如,"姓名":"张华"多个数据由逗号分隔,例如,"姓名":"张华","语文":116一个花括号保存一个JSON对象,例如,{"姓名":"张华","语文":116}一个方括号保存一个JSON

温馨提示

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

评论

0/150

提交评论