Python程序设计-从基础到应用 课件 第7、8章 文件、Python常用标准库_第1页
Python程序设计-从基础到应用 课件 第7、8章 文件、Python常用标准库_第2页
Python程序设计-从基础到应用 课件 第7、8章 文件、Python常用标准库_第3页
Python程序设计-从基础到应用 课件 第7、8章 文件、Python常用标准库_第4页
Python程序设计-从基础到应用 课件 第7、8章 文件、Python常用标准库_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

第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格式文件读写总结line二维列表ls=[[..,..,..,…],[..,..,..,…],[..,..,..,…],[..,..,..,…],……]ltrowlt=line.strip(“\n”).split(“,”)将文件内容读取到列表将列表内容写入到文件f.write(“,”.join(row)+”\n”)文件f《春江花月夜》——字频统计应用实例这里给出《春江花月夜》文本,保存在“春江花月夜.txt”文件中。请编写程序,对《春江花月夜》文本中出现的汉字及标点符号进行统计,字符与出现次数之间用冒号:分隔,输出保存到“字频统计.txt”文件中,该文件要求采用CSV格式存储。参考格式如下(注意,不统计空格和回车字符):春:4,江:12,花:2,月:15,夜:2应用实例分析定义两个文件对象,f1用于读文件,f2用于写文件s保存f1读入的字符串,并去除换行和空格遍历字符串s,将各字符及字频用字典进行统计将字典内容按指定格式写入CSV格式文件应用实例《春江花月夜》字频统计

f1=open("D:\\春江花月夜.txt","r")f2=open("D:\\字频统计.txt","w")s=f1.read()s=s.strip("\n").strip()d={}forchins:d[ch]=d.get(ch,0)+1foriind:f2.write("{}:{},".format(i,d[i]))f1.close()f2.close()单元小结

本单元讲解了文件的基本使用方法,包括文件的打开、关闭、读取和写入。进一步讲解了CSV格式文件数据的表示、存储和处理方法。通过总评成绩计算的实例帮助大家理解数据处理的基本方法。第8章Python常用标准库turtle库知识CONTENT要点Random库turtle库turtle(海龟)是Python的图形绘制库。原理控制一只小海龟,以不同的方向和速度进行位移,而得到的运动轨迹。知识要点turtle库的导入turtle库的函数与应用random库的函数与应用导入turtle库importturtle,函数调用turtle.<函数名>()形式。fromturtleimport*,函数调用<函数名>()形式。importturtleast,将turtle库赋予别名t。函数调用t.<函数名>()形式。设置窗体的函数setup()函数,用于初始化画布窗口大小和位置。setup(640,480,300,200),表示在桌面屏幕(300,200)位置开始创建640×480大小的画布窗体。turtle库角度坐标体系(绝对角度)(0,0)0˚/-360˚90˚/-270˚180˚/-180˚270˚/-90˚xy设置画笔状态的函数函数功能pensize(width)设置画笔线条的粗细pencolor()设置画笔的颜色fillcolor()设置填充颜色color(color1,color2)同时设置画笔颜色和填充颜色begin_fill()开始填充图形end_fill()结束填充图形pendown()放下画笔penup()提起画笔setx()移动x轴到指定位置sety()移动y轴到指定位置goto(x,y)移动画笔到坐标(x,y)绘制同切圆importturtleturtle.setup(600,480)turtle.circle(50)turtle.circle(75)turtle.circle(100)设置颜色的函数pencolor()设置画笔颜色、fillcolor()设置填充颜色、color()同时设置画笔和填充颜色。表示颜色的字符串,例如:“red”、“blue”等。也可以是(r,g,b):颜色对应[0,1]数值,例如:(1,0,0)绘制同切圆fromturtleimport*setup(600,480)color("red","blue")begin_fill()circle(100)end_fill()pencolor(0.5,0.5,0.5)fillcolor(0.5,0.9,0.8)begin_fill()circle(50)end_fill()控制画笔运动的函数方法功能forward()沿画笔方向前进指定距离,简写fd()backward()沿画笔方向后退指定距离,简写bk()left()画笔方向左转指定角度right()画笔方向右转指定角度setheading(angle)设置画笔方向绝对角度,简写seth()home()画笔返回原点circle(r,e)绘制一个指定半径r和角度e的圆或圆弧write(text,align,font)输出文本text,可设置对齐方式、字体等speed()设置画笔的绘制速度,参数为0-10之间实例解析:turtle库绘图绘制同心圆,半径30、60、90以原点(0,0)作为圆心设置海龟起始点,坐标(0,-30),(0,-60),(0,-90)变化逆时针绘制半径分别是30,60,90的圆importturtleastforiinrange(3):t.penup()t.goto(0,-30*i)t.pendown()t.circle(30*i+30)123456绘制边长为200的五角星海龟前进200像素改变前进角度:right(144˚)重复上述步骤,5次fromturtleimport*setup(640,480,300,200)pensize(3)foriinrange(5):fd(200)right(144)123456绘制半径为100的四瓣花一个花瓣可以看作是两个圆相交的部分构成绘制圆弧1:从原点(0,0)出发,绘制90˚圆弧结束。此刻坐标(100,100)处,小海龟朝向:绝对角度90˚修改小海龟的朝向,向左旋转90˚绘制圆弧2:从该点出发,绘制90˚圆弧结束。此刻,坐标(0,0),小海龟朝向:绝对角度270˚绘制半径为100的四瓣花importturtleastt.pensize(5)t.pencolor("red")t.seth(0)t.circle(100,90)t.left(90)t.circle(100,90)(0,0)(100,100)绘制半径为100的四瓣花将初始的绝对角度,0˚、90˚、180˚、270˚幅度递增,重复4次,绘制一朵四瓣花图形。修改代码如下:importturtleastt.pensize(5)t.pencolor("red")foriinrange(4):t.seth(i*90)t.circle(100,90)t.left(90)t.circle(100,90)绘制半径为100的五瓣花设置海龟前进绝对角度:以72˚增幅变化海龟逆时针绘制圆弧,半径100,角度108˚。改变海龟朝向:left(72˚)海龟逆时针绘制圆弧,半径100,角度108˚。重复上述步骤,5次。绘制半径为100的五瓣花importturtleastt.pensize(3)t.color("red")t.fillcolor("yellow")t.begin_fill()foriinrange(5):t.seth(i*72)t.circle(100,108)t.left(72)t.circle(100,108)t.end_fill()五瓣花图形目前仅产生指定颜色、大小、位置的一朵花。若要产生颜色、大小、位置随机的花朵,该如何实现呢?random库random库函数random库主要用于产生随机数。导入库:importrandom函数功能seed()设置随机数种子,可以在调用其他随机函数之前使用random()生成一个[0.0,1.0)之间的随机小数randint(a,b)生成一个[a,b]之间的整数randrange(m,n[,k])生成一个[m,n)之间以k为步长的随机整数uniform(a,b)生成一个[a,b]之间的随机小数>>>importrandom>>>random.random()0.48614923936820276>>>random.randint(6,10)6>>>random.uniform(4,6)5.739520964102294random库函数random库主要用于产生随机数。导入库:importrandom>>>ls=[1,2,3,4,5]>>>random.choice(ls)4>>>random.shuffle(ls)>>>ls[1,4,5,2,3]>>>random.sample(ls,3)[1,2,5]>>>函数功能choice(seq)从序列类型中随机选择一个元素返回shuffle(seq)将序列元素次序随机打乱sample(seq,n)从序列中随机取出n个元素,组成新的列表random库函数>>>importrandom>>>random.seed(100)>>>random.random()0.1456692551041303>>>random.random()0.45492700451402135>>>random.seed(100)>>>random.random()0.1456692551041303>>>random.random()0.45492700451402135>>>random.seed(90)>>>random.random()0.20367044742105156>>>random.random()0.09269342184833151>>>实例解析:生成随机验证码生成随机验证码随机验证码由4个字符构成每个字符取自0~9的数字字符和大小写字母分析大小写字母的ASCII码值在65~123之间每个密码取自数字字符和字母,且固定4位,可使用random库的sample()函数生成随机验证码1importrandoms="0123456789"foriinrange(65,124):s=s+chr(i)ls=random.sample(s,4)print("".join(ls))qN35>>>生成随机验证码2importrandoms="0123456789"c=""foriinrange(65,124):s=s+chr(i)forjinrange(4):c=c+random.choice(s)print(c)cCH9>>>实例解析:简易发红包程序简易发红包程序小李打算发100元红包,人数不限,每个红包小于等于10元的金额。编写程序,要求每发一个红包,输出一行内容,直到发完为止。例如:第*人,收到*元,剩余*元。简易发红包程序分析循环处理随机生成一个红包金额,

温馨提示

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

评论

0/150

提交评论