Python编程从入门到实战-轻松过二级 (思政版)(第2版) 课件 Ch06 输入、输出和文件处理_第1页
Python编程从入门到实战-轻松过二级 (思政版)(第2版) 课件 Ch06 输入、输出和文件处理_第2页
Python编程从入门到实战-轻松过二级 (思政版)(第2版) 课件 Ch06 输入、输出和文件处理_第3页
Python编程从入门到实战-轻松过二级 (思政版)(第2版) 课件 Ch06 输入、输出和文件处理_第4页
Python编程从入门到实战-轻松过二级 (思政版)(第2版) 课件 Ch06 输入、输出和文件处理_第5页
已阅读5页,还剩33页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第二版本章要点:6.1输入和输出概述6.2命令行参数6.3标准输入和标准输出函数6.4文件和文件对象6.5文本文件的读取和写入6.6CSV格式文件的读取和写入第6章输入、输出和文件处理本章要点:6.7JSON格式文件的读取和写入6.8随机文件的读取和写入6.9os模块和文件目录操作6.10综合应用:文件数据的统计和分析第6章输入和输出概述6.1输入和输出概述Python程序通常可以使用下列方式之一实现交互功能:输入输出程序处理图6-1程序的输入和输出示意图(1)命令行参数。(2)标准输入和输出函数。(3)文件输入和输出。(4)图形化用户界面6.2命令行参数通过列表sys.argv访问命令行参数argv[0]为Python脚本名,argv[1]为第1个参数,argv[2]为第2个参数【例6.1】命令行参数示例(hello_argv.py)。在操作系统命令行界面运行Python程序时,根据所指定的命令行参数,显示输出相应的Hello信息importsysprint('Hello,'+sys.argv[1])命令行参数类型转换按惯例,命令行输入参数argv[1]、argv[2]等为字符串,所以如果希望传入的参数为数值,则需要使用转换函数int()或者float()将字符串转换为适合的类型【例6.2】命令行参数示例(randomseq.py):生成n个随机数,其中,n由程序的第一个命令行参数所确定importsys,randomn=int(sys.argv[1])foriinrange(n):print(random.randrange(0,100))6.3标准输入和标准输出函数input函数的格式print函数的格式print函数用于打印一行内容,即将多个以分隔符(sep,默认为空格)分隔的值(value,...,以逗号分隔的值),写入到指定文件流(file,默认为控制台sys.stdout)。参数end指定换行符;flush指定是否强制写入到流【6.3】输入函数和输出函数示例1>>>print(1,2,3)#输出时采用默认分隔符(空格)。输出:123123>>>print(1,2,3,sep=',')#输出时采用逗号(,)分隔符。输出:1,2,31,2,3>>>print(1,2,3,sep=',',end='.\n')#输出时采用逗号分隔符,最后以点结束并换行1,2,3.>>>foriinrange(5):#输出时使用空格代替换行符

print(i,end='')01234【例6.4】输入函数和输出函数示例2(io_test2.py)importdatetimesName=input("请输入您的姓名:")#输入姓名birthyear=int(input("请输入您的出生年份:"))#输入出生年份age=datetime.date.today().year-birthyear#根据当前年份和出生年份计算年龄print("您好!{0}。您{1}岁。".format(sName,age))【例6.5】从控制台读取n个整数并计算其累计和(io_sum.py)n由程序的第一个命令行参数所确定importsysn=int(sys.argv[1])#命令行第一个参数确认所需求和的整数个数ntotal=0#设置求和初始值=0foriinrange(n):number=int(input('请输入整数:'))#输入整数total+=number#整数累加print('累计和为:’,total)#输出n个整数累计和交互式用户输入【例6.6】编写程序(stat.py),输入批量数据(假定当输入-1时,终止输入),统计所输入的数据个数,并求总和以及平均值a=[]#初始化列表x=float(input("请输入一个实数,输入-1终止:"))whilex!=-1:a.append(x)#将所输入的实数添加到列表中x=float(input("请输入一个实数,输入-1终止:"))print("计数:",len(a))#列表长度即为实数个数print("求和:",sum(a))#列表中各元素求和print("平均值:",sum(a)/len(a))#列表中各元素求平均值6.4文件和文件对象文件对象和open函数使用open()函数时,可以指定打开文件的模式mode为:'r'(只读)、'w'(写入,写入前删除旧内容)、'x'(创建新文件,如果文件存在,则导致FileExistsError)、'a'(追加)、'b'(二进制文件)、't'(文本文件,默认值)、'+'(更新,读写)文件的打开、写入、读取和关闭通过内置函数open()可创建或打开文件对象通过文件对象的实例方法write/writelines,可以写入字符串到文本文件通过文件对象的实例方法read/readline,可以读取文本文件的内容文件读写完成后,应该使用close方法关闭文件【例6.7】读取并输出文本文件(type_file.py)

importsysfilename=sys.argv[0]#所读取并输出的就是本程序文件type_file.pyf=open(filename,'r',encoding='utf8')#打开文件line_no=0#统计行号whileTrue:line_no+=1#行号计数line=f.readline()#读取行信息ifline:print(line_no,":",line)#输出行号和该行内容else:breakf.close()#关闭打开的文件with语句和上下文管理协议实现上下文管理协议的对象文件对象支持使用with语句,确保打开的文件自动关闭importsysfilename=sys.argv[0]#所读取并输出的就是本程序文件type_file_with.pyline_no=0#统计行号withopen(filename,'r',encoding='utf8')asf:#使用with语句实现上下文管理协议forlineinf:line_no+=1#行号计数print(line_no,":",line)#输出行号和该行内容f.close()#可以省略【例6.8】利用with语句读取并输出文本文件(type_file_with.py)6.5文本文件的读取和写入在使用open()函数打开或创建一个文件时,其默认的打开模式为只读文本文件。文本文件用于储存文本字符串,默认编码为Unicode存储在文本文件中的数据也可以是结构化数据,例如一维数据或者二维数据一般地,结构化数据文件的存储通常使用特殊分隔符,例如空格分隔、逗号分隔(CSV,Comma-SeparatedValues)、制表符分隔(TSV,Tab-SeparatedValues)、换行分隔,或者其他分隔符分隔一维数据文件通常存储同一个维度的多个数据处理一维数据文件的方式是首先读取文本文件内容,然后使用字符串的split方法拆分各字段内容二维数据文件通常存储两个维度的数据,每一行表示一条记录的多个字段处理二维数据文件的方式是首先读取文本文件内容,然后分别处理各行文本。用户可以使用字符串的split方法拆分各字段内容。但更有效的方法是针对特定的格式,使用CSV或JSON模块提供的函数直接进行处理文本文件的写入打开文件、写入数据和关闭文件1.创建或打开文件对象通过内置函数open()可以创建或打开文件对象,可以指定覆盖模式(文件存在时)、编码和缓存大小2.写入字符串到文本文件打开文件后,可以使用其实例方法write()/writelines(),写入字符串到文本文件。可以使用实例方法flush强制把缓冲的数据更新到文件中f.write(s)#把字符串s写入到文件ff.writelines(lines)#依次把列表lines中的各字符串写入到文件ff.flush()#把缓冲的数据更新到文件中3.关闭文件写入文件完成后,应该使用close方法关闭流,以释放资源,并把缓冲的数据更新到文件中f.close()#关闭文件【例6.9】文本文件的写入示例(textwrite.py)withopen(r'c:\pythonb\data1.txt','w')asf:f.write('123\n')#写入字符串f.write('abc\n')#写入字符串f.writelines(['456\n','def\n'])#写入字符串文本文件的读取打开文件、读取数据和关闭文件1.打开文件对象通过内置函数open()可以打开文件对象。可以指定编码和缓存大小。例如:f1=open('data1.txt','r')#打开data1.txt,若文件不存在,则导致FileNotFoundError2.从打开的文本文件中读取字符数据打开文件后,可以使用下列实例方法读取字符数据。f.read():从f中读取剩余内容直至文件结尾,返回一个字符串。f.read(n):从f中读取至多n个字符,返回一个字符串;如果n为负数或None,读取直至文件结尾。f.readline():从f中读取1行内容,返回一个字符串。f.readlines():从f中读取剩余多行内容,返回一个列表。3.关闭文件可以使用close方法关闭流,以释放资源。通常采用with语句,以保证系统自动关闭打开的流【例6.10】文本文件的读取示例withopen(r'c:\pythonb\data1.txt','r')asf:forsinf.readlines():print(s,end='')文本文件的编码文本文件用于存储编码的字符串,使用open()函数打开文本文件时,可以指定所使用的编码,函数形式如下Python内置的编码包括utf-8、utf8、latin-1、latin1、iso-8859-1、mbcs(仅Windows系统)、ascii、utf-16、utf-32等>>>f=open("1.txt",mode="w",encoding="utf-8")逗号分隔符文本格式csv.reader对象和csv文件的读取。本节基于以下scores.csv文件,其内容为:6.6CSV文件格式的读取和写入(1)学号,姓名,性别,班级,语文,数学,英语102111,宋颐园,男,一班,72,85,82102113,王二丫,女,一班,75,82,51102131,董再永,男,三班,55,74,79102121,陈香燕,女,二班,80,86,68102135,周一萍,女,三班,72,76,72【例16.11】使用reader对象读取csv文件importcsvdefreadcsv1(csvfilepath):withopen(csvfilepath,newline='')asf:#打开文件f_csv=csv.reader(f)#创建csv.reader对象headers=next(f_csv)#标题print(headers)#打印标题(列表)forrowinf_csv:#循环打印各行(列表)print(row)if__name__=='__main__':readcsv1(r'scores.csv')CSV文件格式的读取和写入(2)csv.writer对象和csv文件的写入【例16.12】使用writer对象写入csv文件importcsvdefwritecsv1(csvfilepath):headers=['学号','姓名','性别','班级','语文','数学','英语']rows=[('102111','宋颐园','男','一班','72','85','82'),('102113','王二丫','女','一班','75','82','51')]withopen(csvfilepath,'w',newline='')asf:#打开文件

f_csv=csv.writer(f)#创建csv.writer对象

f_csv.writerow(headers)#写入1行(标题)

f_csv.writerows(rows)#写入多行(数据)if__name__=='__main__':writecsv1(r'scores1.csv')6.7JSON格式文件的读取和写入JSON(JavaScriptObjectNotation,JavaScript对象标记)定义了一种标准格式,用字符串来描述典型的内置对象(如字典、列表、数字和字符串)。虽然JSON原来是JavaScript编程语言的一个子集,但它现在是一个独立于语言的数据格式,所有主流编程语言都有生产和消费的JSON数据的库JSON是网络数据交换的流行格式之一Python标准库模块json包含将Python对象编码为JSON格式(简称JSON)和将JSON解码到Python对象的函数:dumps(obj):返回把obj对象序列化为JSON字符串。dump(obj,fp):把obj对象序列化为JSON字符串写入到文件fp。loads(s):返回把JSON字符串s反序列化后的对象。load(fp):返回把从文件fp中读取JSON字符串反序列化后的对象。>>>importjson>>>data=[{'a':'A','b':(2,4),'c':3.0}]>>>str_json=json.dumps(data)>>>str_json#输出:'[{"a":"A","c":3.0,"b":[2,4]}]'>>>data1=json.loads(str_json)>>>data1#输出:[{'a':'A','c':3.0,'b':[2,4]}]JSON文件的写入和读取【例6.13】JSON文件的写入(对象JSON格式系列化)(json_dump.py)importjsonurls={'baidu':'/','sina':'/','tencent':'/','taobao':'/'}withopen(r'c:\pythonb\data.json','w')asf:json.dump(urls,f)【例6.14】JSON文件的读取(对象JSON格式反系列化)(json_load.py)importjsonwithopen(r'c:\pythonb\data.json','r')asf:urls=json.load(f)print(urls)6.8随机文件的读取和写入创建或打开随机文件使用内置函数open(),指定打开模式'+‘定位使用其实例方法seek进行定位写入/读取数据使用其实例方法write/read关闭文件使用close方法关闭流,以释放资源【例6.15】随机文件的读写示例importosf=open('data.dat','w+b')#创建或打开文件data.datf.seek(0)#定位到开始位置f.write(b'Hello')#写入字节数据f.write(b'World')#写入字节数据f.seek(-5,os.SEEK_END)#定位到结束位置倒数第5个位置b=f.read(5)#读取5个字节print(b)#输出:b'World'6.9os模块和文件目录操作使用标准库中的os模块,用户可以实现操作系统的目录处理创建目录、删除目录:getcwd()(获取当前工作目录)、chdir()(切换当前工作目录)、mkdir()(创建单级目录)、makedirs()(创建多级目录)、listdir()(显示目录中的文件/子目录列表)、rmdir()(删除目录)、remove()(删除文件)和rename()(文件或目录重命名)等函数【例6.16】文件目录操作示例>>>importos>>>os.getcwd()#显示当前目录'C:\\Users\\jh\\AppData\\Local\\Programs\\Python\\Python312'>>>os.chdir(r"c:\pythonb")#切换当前目录>>>os.listdir(r"c:\pythonb")#列举当前目录中的内容['ch01','ch02','ch03','ch04','ch05','ch06','ch07','ch08','ch09','ch10','ch11','ch12','data.json','data1.txt']>>>os.makedirs(r"c:\pythonb\temp\dir1")#创建多级子目录。注:mkdir()只能创建一级子目录>>>os.rename(r"c:\pythonb\temp\dir1",r"c:\pythonb\temp\dir2")#子目录重命名6.10综合应用:文件数据的统计和分析6.10.1统计储存在文本文件中的学生成绩信息【例6.17】编写程序(process_txt.py):读取data.txt中的数据(假设文件中存储若干成绩,每行一个成绩),统计分析成绩的个数、最高分、最低分以及平均分,并把结果写入result.txt文件中scores=[]#创建空列表,用于储存从文本文件中读取的成绩信息txtfilepath='data.txt'withopen(txtfilepath,encoding='utf-8')asf:#打开文件forsinf.readlines():#读取并遍历文件行scores.append(int(s))result_filepath='result.txt'withopen(result_filepath,'w',encoding='utf-8')asf:#打开文件f.write("成绩个数:{}\n".format(len(scores)))f.write("最高分:{}\n".format(max(scores)))f.write("最低分:{}\n".format(min(scores)))f.write("平均分:{}\n".format(sum(scores)/len(scores)))6.10.2统计储存在CSV文件中的学生成绩信息【例6.18】编写程序(read_csv.py):读取data.csv中的数据,统计分析成绩的平均值,并打印出结果。假设data.csv的内容如下importcsvscores=[]#创建空列表,用于储存从csv文件中读取的成绩信息csvfilepath='data.csv'withopen(csvfilepath,newline='')asf:#打开文件f_csv=csv.reader(f)#创建csv.reader对象headers=next(f_csv)#标题forrowinf_csv:#循环读取各行(列表)scores.append(row)print("原始记录:",scores)scoresData=[]forrecinscores:scoresData.append(int(rec[2]))print("成绩列表:",scoresData)print("平均成绩:",sum(scoresData)/len(scoresData))6.10.3基于字典的通信录本节实现一个简单的基于字典数据结构的通信录管理系统。系统采用JSON文件来保存数据。通信录设计为字典{name:tel}。程序开始时从addressbook.json文件中读取通信录,然后显示主菜单,具体包括如下功能。(1)显示通讯录清单。如果通信录字典中存在用户信息,则显示通讯录清单,包括姓名和电话号码;如果通信录字典中不存在任何用户信息,则提示“通讯录为空”。(2)查询联系人。提示用户输入姓名name,在通信录字典中查询该键,如果存在,输出联系人信息;如果不存在,提示是否新建联系人。(3)插入新的联系人。提示用户输入姓名name,在通信录字典中查询该键,如果存在,提示是否更新联系人信息;如果不存在,提示输入电话号码,并插入字典键-值对。(4)删除已有联系人。提示用户输入姓名name,在通信录字典中查询该键,如果不存在,输出“联系人不存在”的提示信息;如果存在,从通信录字典中删除键-值对,并输出信息。(5)退出。保存通信录字典到addressbook.json中,退出循环【例6.19】基于字典的通信录(addressbook.py)(1)"""简易通信录程序"""importos,jsonab={}#通信录保存在字典中#从JSON文件中读取通信录ifos.path.exists("addressbook.json"):withopen(r'addressbook.json','r',encoding='utf-8')asf:ab=json.load(f)whileTrue:print("|---欢迎使用通讯录程序---|")print("|---1:显示通讯录清单---|")print("|---2:查询联系人资料---|")print("|---3:插入新的联系人---|")print("|---4:删除已有联系人---|")print("|---0:退出-------------|")choice=input('请选择功能菜单(0-4):’)ifchoice=='1':if(len(ab)==0):print("通讯录为空")else:fork,vinab.items():print("姓名={},联系电话={}".format(k,v))【例6.19】基于字典的通信录(addressbook.py)(2)

elifchoice=='2':name=input("请输入联系人姓名:")if(namenotinab):ask=input("

温馨提示

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

评论

0/150

提交评论