Python程序设计-从基础到应用 第7章 文件_第1页
Python程序设计-从基础到应用 第7章 文件_第2页
Python程序设计-从基础到应用 第7章 文件_第3页
Python程序设计-从基础到应用 第7章 文件_第4页
Python程序设计-从基础到应用 第7章 文件_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

第7章文件文件的打开、关闭知识CONTENT要点文件的读写操作CSV格式文件的读写操作文件概述文件是存储在辅助存储器上的信息集合。按照文件内容的形式,包括两种类型:文本文件二进制文件文本文件是基于字符编码的文件,如unicode编码,文件内容就是字符。二进制文件是基于值编码的文件,如0、1,存储的是二进制数据。文件的打开open()函数,打开文件并返回一文件对象。<文件对象名>=open(<文件路径及文件名>,<打开模式>)f=open("D:\\a.txt","r")打开模式含义'r'只读方式打开文本文件'w'只写方式打开或创建一个文本文件'a'追加打开一个文本文件,在文件末尾写数据'rb'只读方式打开二进制文件'wb'只写方式打开或创建一个二进制文件'ab'追加打开一个二进制文件,在文件末尾写数据+在原功能基础上增加同时读写功能,如r+,w+,a+等f文件的关闭文件使用结束后,就应该关闭它。关闭文件是断开文件对象与文件之间的关联。用close()方法关闭,语法形式如下:<文件对象名>.close()f.close()文件的读写文件的读文件打开成功后,可以根据打开文件的模式对文件进行读写操作。方法含义f.read(size)从文件中读取指定size字节的数据,省略size,则读取整个文本。f.readline()从文件中读入一行内容。f.readlines()从文件中读入多行内容,返回一个列表。文件的读:一次性读入f.read()函数一次性读入文件,其结果是一个字符串。夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。>>>1234f=open("D:\\a.txt","r")s=f.read()print(s)f.close()f文件的读:读入一行f.readline()函数读入文件的一行,其结果是一行字符串。f夫君子之行,>>>1234f=open("D:\\a.txt","r")s=f.readline()print(s)f.close()文件的读:读入多行f.readlines()函数读入文件的多行,其结果是一个列表。['夫君子之行,\n','静以修身,\n','俭以养德,\n','非淡泊无以明志,\n','非宁静无以致远。\n']1234f=open("D:\\a.txt","r")ls=f.readlines()print(ls)f.close()f文件的读:逐行读取文本文件可以使用遍历循环逐行遍历文件,并进行处理。使用方法如下:f=open(<文件路径及名称>,"r")forlineinf:#处理当前行数据linef.close()文件的读:逐行读取夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。>>>1234f=open("D:\\a.txt","r")forlineinf:print(line,end="")f.close()f文件的写文本文件的写入,通常使用write()和writelines()方法。方法含义f.write(字符串)在文件当前位置写入字符串,并返回写入的字符的个数。f.writelines(字符串列表)从文件中当前位置一次写入列表中的所有元素文件的写:写字符串f.write()把字符串内容写入文件。1234f=open("D:\\b.txt","wt")f.write("夫君子之行,\n")f.write("静以修身,\n")f.write("俭以养德,\n")f.write("非淡泊无以明志,\n")f.write("非宁静无以致远。\n")f.close()567文件的写:写字符串列表f.writelines()把字符串列表写入文本文件。1234f=open("D:\\c.txt","wt")ls=["夫君子之行,\n","静以修身,\n","俭以养德,\n","非淡泊无以明志,\n","非宁静无以致远。\n"]f.writelines(ls)f.close()文件指针文件打开后,由文件指针指向文件开端,伴随着读写的进行,指针不断后移,这是顺序存取。>>>f=open("D:\\a.txt","r")>>>s=f.read()>>>print(s)夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。>>>s=f.read()>>>print(s)>>>f文件指针的定位f.seek(offset,[from])方法定位文件指针的位置,实现随机存取。offset表示偏移量。from表示起始位置。0:文件起始处开始1:文件当前位置开始2:文件末尾位置开始文件指针的定位>>>f=open("D:\\a.txt","r")>>>s=f.read()>>>print(s)夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。>>>f.seek(12,0)12>>>s=f.read()>>>print(s)f静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。>>>实例解析:

文本内容大小写转换有一个英文文本文件birds1.txt,是泰戈尔的飞鸟集诗句内容,编写一个程序读取其内容,并将大写改小写,小写改大写,写入原文本文件。分析定义一个文件对象f,以读写的方式打开文件。读入文件到字符串s,进行大小写转换。文件指针重定位到文件开头,将更改后的字符串s,写入原文件。假设有一个英文文本文件,编写一个程序读取其内容,并将大写改小写,小写改大写,写入原文本文件。1234f=open("d:\\birds.txt","r+")s=f.read()s=s.swapcase()f.seek(0,0)f.write(s)f.close()56CSV格式文件的读写CSV格式文件

CSV格式文件(Comma-SeparatedValues),是一种以逗号分隔数值的文件类型,通常以纯文本的方式存储数据表。在数据库或电子表格中,常见的导入导出文件格式就是CSV格式。CSV格式文件与列表列表,是对CSV格式文件读写时,存放数据的结构。一维列表,存放一维数据。ls=['1001','刘丽','86','97','90']CSV格式文件与列表列表,是对CSV格式文件读写时,存放数据的结构。二维列表,存放二维数据。ls=[['1001','刘丽','86','97','90'],[‘1001’,‘李阳’,‘78’,‘79’,‘65’],[‘1001’,‘张宇','89',‘87',‘85'],[‘1001’,‘赵俊',‘96','95','94']]CSV格式:一维数据的读将读入的字符串,以逗号分隔,生成列表。fls=['1001','刘丽','86','97','90']1234f=open("d:\\score2.txt","r",encoding="utf-8")s=f.read().strip(“\n”)#去除换行符ls=s.split(“,”)#以逗号分隔,生成列表print(ls)f.close()5split()方法CSV格式:一维数据的写将将元素为字符串形式的列表,以逗号相连,形成一个长字符串,写入文件。ls=['1001','刘丽','86','97','90']fjoin()方法234561f=open("d:\\score3.txt","w",encoding="utf-8")ls=['1001','刘丽',86,97,90]foriinrange(2,len(ls)):ls[i]=str(ls[i])f.write(“,”.join(ls))f.close()#将列表元素处理成字符串#将列表元素通过逗号连接成大字符串,写入文件CSV格式:二维数据的读逐行遍历文件内容,将每行字符串line按逗号分隔,生成子列表lt。将子列表lt添加到二维列表ls中。linels=[['1001','刘丽','86','97','90'],[‘1001’,‘李阳’,‘78’,‘79’,‘65’],[‘1001’,‘张宇','89',‘87',‘85'],[‘1001’,‘赵俊',‘96','95','94']]ItCSV格式:二维数据的读逐行遍历文件内容,将每行字符串line按逗号分隔,生成子列表lt。将子列表lt添加到二维列表ls中。1234f=open("d:\\score1.txt","r",encoding="utf-8")ls=[]forlineinf:lt=line.strip(“\n”).split(“,”)ls.append(lt)print(ls)f.close()567#子列表添加到二维列表ls中#将文件当前行的字符串去除换行符,以逗号分隔生成子列表ltCSV格式:二维数据的写将逐行遍历二维列表内容,将每个子列表row的元素,以逗号相连,形成字符串,加上换行符,写入到文件中ls=[['1001','刘丽','86','97','90'],[‘1001’,‘李阳’,‘78’,‘79’,‘65’],[‘1001’,‘张宇','89',‘87',‘85'],[‘1001’,‘赵俊',‘96','95','94']]rowfCSV格式:二维数据的写1234f=open("d:\\score4.txt","w",encoding="utf-8")ls=[['1001','刘丽','86','97','90'],['1001','李阳','78','79','65'],['1001','张宇','89','87','85'],['1001','赵俊','96','95','94']]forrowinls:f.write(“,”.join(row)+"\n")f.close()5#遍历二维列表的每个子列表#将子列表内容,用逗号连接,形成字符串,写入文件将逐行遍历二维列表内容,将每个子列表row的元素,以逗号相连,形成字符串,加上换行符,写入到文件中CSV格式文件,数据项的遍历forlineinf:foriteminline:<对当前item数据项进行处理>由于CSV格式数据是规则的用逗号隔开的数据项,因此可以通过遍历循环,处理各数据项。在各行,逐项遍历当前行数据:对当前数据项进行处理。逐行循环遍历文件fCSV格式数据的读取对CSV格式数据,按行列方式进行读入、输出。工号,姓名,日期,交易额,柜台1001,张三,20190301,2000,化妆品1002,李四,20190301,1800,化妆品1003,王五,20190301,800,食品1004,赵六,20190301,1100,食品1005,周七,20190301,600,日用品1006,钱八,20190301,700,日用品1006,张三,20190301,850,蔬菜水果1001,张三,20190301,600,蔬菜水果1001,张三,20190301,1300,化妆品1002,李四,20190301,1500,化妆品1003,王五,20190301,1000,食品1004,赵六,20190301,1050,食品1005,周七,20190301,580,日用品1006,钱八,20190301,720,日用品1002,李四,20190301,680,蔬菜水果1003,王五,20190301,830,蔬菜水果CSV格式数据的读入对CSV格式数据,按行列方式进行读入、输出。1234f=open("D:\\a.csv","r",encoding="utf-8")forlineinf:foriteminline:print(item,end="")f.close()5实例解析:

超市销售额统计超市销售额统计已知文件a.csv,记录了某超市1天的营业额,现在要求编程,统计每个员工的销售总额,以及每个柜台的销售总额。统计每个员工销售总额问题分析如何读入CSV格式二维数据?如何汇总同一个员工的销售记录?用于计算

销售总额?统计每个员工销售总额将CSV格式二维数据,读入到二维列表ls;下标方式遍历二维列表,用字典统计员工销售总额,字典键值对为“姓名:

销售总额”;遍历字典,输出各员工销售总额。实现思路统计每个员工销售总额12345f=open("d:\\a.csv","r",encoding="utf-8")d={}ls=[]forlineinf:lt=line.strip("\n").split(",")ls.append(lt)foriinrange(1,len(ls)):d[ls[i][1]]=d.get(ls[i][1],0)+int(ls[i][3])678实现代码91011foritemind:print("{}:{}".format(item,d[item]))f.close()二维列表ls统计每个员工销售总额12345f=open("d:\\a.csv","r",encoding="utf-8")d={}ls=[]forlineinf:lt=line.strip("\n").split(",")ls.append(lt)foriinrange(1,len(ls)):d[ls[i][1]]=d.get(ls[i][1],0)+int(ls[i][3])678实现代码91011foritemind:print("{}:{}".format(item,d[item]))f.close()赵六:2150王五:2630李四:3980周七:1180张三:4750钱八:1420>>>统计每个柜台销售总额12345f=open("d:\\a.csv","r",encoding="utf-8")d={}ls=[]forlineinf:lt=line.strip("\n").split(",")ls.append(lt)foriinrange(1,len(ls)):d[ls[i][4]]=d.get(ls[i][4],0)+int(ls[i][4])678实现代码91011foritemind:print("{}:{}".format(item,d[item]))f.close()二维列表ls统计每个柜台销售总额12345f=open("d:\\a.csv","r",encoding="utf-8")d={}ls=[]forlineinf:lt=line.strip("\n").split(",")ls.append(lt)foriinrange(1,len(ls)):d[ls[i][1]]=d.get(ls[i][4],0)+int(ls[i][4])678实现代码91011foritemind:print("{}:{}".format(item,d[item]))f.close()食品:3950蔬菜水果:2960日用品:2600化妆品:6600>>>实例解析:

总评成绩计算编写程序,读入scores.csv文件数据,包括学号、平时成绩、期末成绩3列。根据平时成绩占40%,期末成绩占60%的比例计算总评成绩,并按学号、总评成绩两列写入另一个文件scored.csv文件中。scores.csvscored.csv问题分析逐行遍历源数据文件,如何计算总评成绩?如何将学号、总评成绩,作为记录,逐行写入

目标数据文件?实现思路文件对象f1读入scores.csv数据,文件对象f2写scored.csv数据逐行遍历f1文件内容,根据第2、3两列数据,计算出总评成绩f2f1实现思路形成[学号,总评成绩]子列表,逐行加入二维列表ls中遍历列表ls,逐行将数据写入f2文件f2f1实现代码f1=open("D:\\scores.csv","r")f2=open("D:\\scored.csv","w")ls=[]forlineinf1:lt=line.strip("\n").split(",")

s=eval(lt[1])*0.4+eval(lt[2])*0.6ls.append([lt[0],str(s)])forrowinls:f2.write(",".join(row)+"\n")f1.close()f2.close()1234567891011CSV格式文件读写总结lin

温馨提示

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

评论

0/150

提交评论