《Python程序设计》课件第6章 文件与异常处理_第1页
《Python程序设计》课件第6章 文件与异常处理_第2页
《Python程序设计》课件第6章 文件与异常处理_第3页
《Python程序设计》课件第6章 文件与异常处理_第4页
《Python程序设计》课件第6章 文件与异常处理_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

Python程序设计第6章文件与异常处理【教学目标】

学习内容认识文件文本文件处理CSV格式文件处理路径和文件操作错误与异常异常处理技能目标能识别常用文件类型会使用Python对txt、CSV文件进行读写操作会使用os、glob、shutil模块对文件及路径进行操作能理解异常的概念会使用try-except-finally异常处理机制会使用raise主动抛出异常任务一完善党员信息管理系统的安全性

为了使系统更加安全,信息不容易泄漏,任何信息管理系统都应设置登陆帐号和密码,那么帐号和密码怎么设置及存储在那里呢?

本次的任务是使用Python编写登陆系统验证程序,完善党员信息管理系统的安全性,要求将用户的id和密码以字典对象的格式存入文件中,然后从文件中读取数据,并验证输入的id和密码是否正确。。【提示】(1)使用列表存入字典内容。(2)通过wb模式打开保存文件。(3)因为写入的内容较复杂,使用pickl.dump()方法实现序列化写入。(4)再通过rb模式打开读取文件内容。(5)输入id和密码与文件内容比较进行验证。(6)输出验证结果。(6)如果通过身份验证,则通过导入党员信息管理系统模块,进入党员信息管理系统。6.1认识文件

文件是指记录在存储介质上的一组相关信息的集合,存储介质可以是纸张、计算机磁盘、光盘或其他电子媒体,也可以是照片或标准样本,还可以是它们的组合。

在本章内容中,对于文件若无特殊说明,主要是指计算机文件,即以计算机磁盘为载体存储在计算机上的信息集合。6.1认识文件6.1.1文件类型6.1认识文件6.1.2文件命名(1)文件名最长可以使用255个字符。(2)使用扩展名,扩展名用来表示文件类型,也可以使用多间隔符的扩展名,其文件类型由最后一个扩展名决定。如win.ini.txt是一个合法的文件名。(3)文件名中允许使用空格,但不允许使用英文输入法状态下的<>/\:”*?。(4)Windows系统对文件名中大小写的字母在显示时会有不同,但在使用时不区分大小写。

需要注意的是,文件扩展名可以人为设定,扩展名为txt的文件也有可能是一张图片;同样,扩展名为mp3的文件,也可能是一个视频。但是人为修改文件扩展名可能会导致文件损坏。6.2文本文件处理6.2.1打开与关闭文件

在Python中进行文件的打开和关闭操作使用两个内置方法:open()方法和close()方法。

使用open()方法的基本格式如下。

myfile=open(filename[,mode])

其中,myfile为引用文件对象的变量,filename为文件名字符串,mode为文件读写模式。文件名可包含相对或绝对路径,省略路径时,Python在当前工作目录中搜索文件并打开。实例一利用open()、close()方法打开、关闭文件。实现思路:首先创建D:\python\ch06工作目录(本章所有例题存放本目录),并在本目录内创建一个空白的news.txt文件,然后再创建一个名为test1.py文件,利用绝对路径和相对路径两种方式打开news.txt文件。myfile=open("news.txt") #打开news.txt文件,参数为相对路径,模式缺省为默认rprint(myfile)myfile.close()myfile=open(r“D:\python\ch06\news.txt") #参数为绝对对路径,模式缺省为默认rprint(myfile)myfile.close()6.2文本文件处理6.2.2读写文件内容

在打开文件之后,需要对文件内容进行读取和写入等操作,文件内容相关的读写方法如下:myfile.read():将从文件指针位置开始到文件末尾的内容作为一个字符串返回。myfile.read(n):将从文件指针位置开始到n个字符作为一个字符串返回。myfile.readline():将从文件指针位置开始到下一个换行符号的内容作为一个字符串返回,读取内容包含换行符号。myfile.readlines():将从文件指针位置开始到文件末尾的内容作为一个列表返回,每一行的字符串作为一个列表元素。myfile.write(string):在文件指针位置写入字符串,返回写入的字符个数。myfile.writelines(list):将列表中的数据合为一个字符串写入到文件指针位置,返回写入的字符个数。myfile.seek(n):将文件指针移动到第n+1个字节,0表示指向文件开头的第一个字节。myfile.tell():返回文件指针的当位置6.2文本文件处理6.2.2读写文件内容1.文件打开模式实例二利用write()写入文件内容。如在工作目录(D:\python\ch06)下编写一个名为test2.py程序实现在news.txt文件中写入内容“本市明天早上有雨”。实现思路:接着例6-1内容,首先用open方法打开news.txt文件,打开模式设为w(可写)模式;使用write()方法将内容写入,再用close()方法关闭文件。myfile=open("news.txt","w") #通过w模式打开news.txt文件myfile.write("本市明天早上有雨") #写入内容myfile.close() #关闭文件程序运行后,可以手动打开news.txt文件,验证内容是否已经写入。实例三利用read()读出文件内容。如在工作目录(D:\python\ch06)下编写一个名为test3.py程序实现读出news.txt文件内容。实现思路:用open()方法打开news.txt文件,打开模式设为r(只读)模式;使用read()方法将内容读取并输出,再用close()方法关闭文件。myfile=open("news.txt","r") #通过r模式打开news.txt文件print(myfile.read()) #查看内容myfile.close() #关闭文件程序输出结果:本市明天早上有雨实例四追加文件内容。如在工作目录(D:\python\ch06)下编写一个名为test4.py程序实现在news.txt文件的原内容后添加上“作者:叶子”。实现思路:用open()方法打开news.txt文件,打开模式设为a(追加)模式;使用write()方法将内容追加写入到最后,再用close()方法关闭文件。myfile=open("news.txt","a") #通过a模式打开news.txt文件myfile.write(“作者:叶子") #为了美观插入一个换行符用"\r"myfile.close() #关闭文件myfile=open("news.txt","r") #通过r模式打开news.txt文件print(myfile.read()) #查看内容myfile.close() #关闭文件程序输出结果:本市明天早上有雨作者:叶子6.2文本文件处理6.2.2读写文件内容

2.文件读写位置使用记事本编辑文件时,都会有一个光标,表示目前需要在哪个位置进行编辑,在Python文件内容的读写过程中,也提供一种类似的功能seek()方法来定位文件的读写位置。seek()方法有两个参数,第一个参数是偏移量,表示光标移动几个字符,第二个参数是定位,0表示从文件开头开始,1表示从当前位置开始,2表示从文件未尾开始,默认是0。实例五在文件指定位置添加内容。如在工作目录(D:\python\ch06)下编写一个名为test5.py程序实现在news.txt文件的开头添加“标题,天气情况预报”。实现思路:用seek()方法移动光标到文件开始位置;如果使用之前学到的Python知识还无法直接从文本的开头添加内容,并且保持后面的文本不变。需要先将文件原有的内容读出并保存到某一变量,然后再移动光标到指定位置,利用r+(可读写)模式写入内容覆盖的特点,重新写入内容。myfile=open("news.txt","r+") #r+为既可读也可写模式content=myfile.read() #读出之前的内容存到content变量中,并将光标移动到内容的末尾myfile.tell()myfile.seek(0,0) #移动光标到最前头myfile.tell()myfile.write("标题,天气情况预报"+content) #写入内容myfile.close()myfile=open("news.txt","r+") #r+为既可读也可写模式print(myfile.read()) #查看内容myfile.close() #关闭文件程序输出结果:标题,天气情况预报本市明天早上有雨作者:叶子6.2文本文件处理6.2.2读写文件内容3.行读取文件前面介绍的read()方法可以实现一次性将文件内容返回,返回类型为str,另外,还有行读取的方法,即将每一行当成一个单位字符串,或逐返回或整体返回。行读取有两种方法:readline()和readlines()。readline()方法用于在文件中读取单独一整行,从文件指针的位置向后读取,直到遇到换行符结束,返回类型为str,当遇到比较大的文件的时候,可以用这种方法来避免内存不足问题;readlines()方法读取文件的所有行,可以用循环遍历的方式逐行读取,返回类型是list。实例六使用行读取文件方法读出文件内容。如在工作目录(D:\python\ch06)下编写一个名为test6.py程序,要求使用行读取的两种方法分别读出news.txt文件内容。实现思路:用open()打开news.txt文件,打开模式设为r(可读)模式;使用while循环结合readline()方法按行读取,直到没有下一行为止;再使用readlines()方法读取文件内容,然后使用for循环遍历打印输入。myfile=open("news.txt","r")line=myfile.readline()whileline:print(line)line=myfile.readline()myfile.close()myfile=open("news.txt","r")forline2inmyfile.readlines():print("readlines方法:"+line2)myfile.close()程序输出结果:标题,天气情况预报本市明天早上有雨作者:叶子readlines方法:标题,天气情况预报readlines方法:本市明天早上有雨readlines方法:作者:叶子6.2文本文件处理6.2.2读写文件内容4.文件编码格式文件内容由英文、中文等语言符号组成,在文件读取过程中,如果和文件编码格式不符的话,很可能报错打不开的,在Python中,常见的编码格式有ASCII、Unicode、GBK、UTF-8等。ASCII码:ASCⅡ码使用1个字节存储英文或字符,主要是英文等欧洲国家的语言符号。Unicode:使用2个字节来存储大约6535个字符,包括除英文外很多其他国家的语言符号。GBK:汉字内码扩展规范,将汉字对应成一个数字编码。UTF-8:是Unicode的实现方式之一,对中文友好。常用的支持中文的编码有UTF-8和GBK,在出现中文字符的编码格式错误的时候,可以尝试用这两种方式打开。在打开文件时,使用encoding参数指定编码格式。实例七使用不同的编码格式打开文件。如在工作目录(D:\python\ch06)下编写一个名为test7.py程,要求使用ASCII编码格式打开news.txt文件。myfile=open("news.txt","r",encoding="ascii")print(myfile.read())file.close()6.2文本文件处理6.2.3with语句在with语句下对文件操作,可以不用执行close()方法关闭打开的文件。with语句会自动关闭。因为with语句有两个主要作用。(1)解决异常退出时的资源释放问题。(2)解决用户忘记调用close()方法而产生的资源泄漏问题。使用with语句的基本格式如下。withopen(…)asmyfile:myfile.read()…其中,myfile是给这个打开的文件取的名字,不能与其他变量或者关键字冲突。实例八with语句的使用,如在工作目录(D:\python\ch06)下编写一个名为test8.py程序,要求用with语句打开news.txt文件。withopen("news.txt")asmyfile:print(myfile.read())print(myfile.read())程序输出结果:标题,天气情况预报本市明天早上有雨作者:叶子ValueError:I/Ooperationonclosedfile.6.2文本文件处理6.2.4用文件存储对象pickle模块中最常用的方法有:pickle.dump(obj,file,[,protocol])方法的功能:将obj对象序列化存入已经打开的file中。其中,obj是想要序列化的obj对象,file是要存储的文件名称,protocol是序列化使用的协议,如果该项省略,则默认为0,表示以文本的形式序列化,还可以是1或2,表示以二进制的形式序列化。pickle.load(file)方法的功能:将file中的对象序列化读出。实例九pickle模块读写文件,如在工作目录(D:\python\ch06)下编写一个名为test9.py程序,实现使用pickle模块写入列表和字典内容到文件中,并把文件内容打印输出。x=[1,2,'abc'] #创建列表对象y={'name':'John','age':20} #创建字典对象withopen(r'D:/python/ch06/objdata.bin','wb')asmyfile: #用wb打开文件importpickle #导入pickle模块pickle.dump(x,myfile) #将列表写入文件pickle.dump(y,myfile) #将字典写入文件withopen(r'D:/python/ch06/objdata.bin','rb')asmyfile: #用rb再次打开文件print(myfile.read()) #用read()方法读取文件中全部内容,并打印myfile.seek(0) #把文件指针移回到开始位置x1=pickle.load(myfile) #从文件中读取对像x2=pickle.load(myfile) #从文件中读取对像print(x1) #打印内容print(x2) #打印内容程序输出结果:b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02\x8c\x03abc\x94e.\x80\x04\x95\x1b\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x04John\x94\x8c\x03age\x94K\x14u.'[1,2,'abc']{'name':'John,'age':20}6.3CSV格式文件处理6.3.1CSV格式文件的认识CSV指Comma-SeparatedValues,即逗号分隔值。CSV文件也是文本文件,内容格式与数据库表格格式很像,是用逗号隔开的结构化数据,在数据分析中,许多原始数据就是以这种格式保存的。例如,下面的内容是一个典型的CSV文件内容。姓名,年龄,爱好叶子,20,篮球张三,22,足球李四,21,音乐6.3CSV格式文件处理6.3.2操作CSV文件数据要在Python中操作或处理CSV格式文件,需要用到Python的内置模块csv。reader()方法返回一个生成器,可以通过循环对其整体遍历。writer()方法返回一个writer对象,该对象提供writerow()方法,将内容按行的方式写入CSV文件中。实例十使用csv模块读写文件。如在工作目录(D:\python\ch06)下编写一个名为test10.py程序,使用csv模块将student.txt文件内容写到CSV格式文件。并把内容输出。为了实现本例,先在同一工作目录(D:\python\ch06)下创建一个名为student.txt的文本文件,内容如下:姓名,年龄,成绩叶子,20,85张三,22,70李四,21,90王五,20,80实现思路:(1)用w模式打开空的student.csv文件,如果没有则创建,再创建一个writer对象。(2)打开studenttxt文件,并按行循环遍历读取内容。(3)利用writer的writerow()方法把studenttxt文件内容按行写入student.csv文件中。(4)再用r模式打开student.csv文件,再创建一个reader对象。(5)通过循环对reader对象整体遍历输出。importcsv #导入csv模块#新建CSV文件,并进行写操作withopen("student.csv","w",encoding="utf-8",newline="")ascsvfile:#以w模式打开csv文件writer=csv.writer(csvfile) #创建一个编辑对象withopen("student.txt","r")asmyfile: #打开txt文件forlineinmyfile.readlines():line_list=line.strip("\n").split(",") #将内容转换为list,去除换行符writer.writerow(line_list) #将内容按行写入#读操作withopen("student.csv","r",encoding="utf-8")ascsvfile:#打开csv文件,r模式reader=csv.reader(csvfile) #创建一个编辑对象forrowinreader:print(row) #将内容读出程序输出结果:['姓名年龄成绩']['叶子2085']['张三2270']['李四2190']['王五2080']6.4路径和文件操作一个文件有两个属性,一是文件名,一是路径。路径指明了文件在计算机上的位置,它由目录及目录分隔符组成。例如,在Windows系统下“D:\python\ch06\test1.py”路径指明了文件test1.py的位置,它位于D盘python目录下的ch06目录下,路径D:部分是根目录,python和ch06均为目录,Windows系统下目录分隔符为\,目录下可以包含文件和其他目录。另外,文件的扩展名为.py,说明它是一个py源程序文件。

在Python中,能对路径和文件操作的模块较多,本节主要介绍常用的三个模块:os、glob、shutil。6.4路径和文件操作6.4.1os模块os模块是Python标准库中的一个用于访问操作系统的模块,比如复制、创建、修改、删除文件及文件夹,设置用户权限等功能。实例十一使用os模块创建目录并在目录下创建文件。如在工作目录(D:\python\ch06)下编写一个名为test11.py程序,要求使用os模块创建目录"D:\python\ch06\学生数据"。并在本目录下创建一个文件myfile.txt,里面的内容为:“HelloPython”。实现思路:首先确认是否有目标路径,如果没有则创建。importos #导入os模块path="D:\python\ch06\学生数据" #确定路径ifnotos.path.exists(path): #判断路径是否存在os.mkdir(path) #创建路径os.chdir(path) #改变当前工作目录到D:\python\ch06\学生数据myfile=open("myfile.txt","w") #打开文件myfile.write("HelloPython") #向文件写入内容myfile.close() #关闭文件代码运行成功之后,通过Windows文档管理器查看,可以发现路径“D:\python\ch06\学生数据”已经被创建,并且有一个文件myfile.txt,里面的内容为:“HelloPython”。6.4路径和文件操作6.4.2glob模块glob模块提供了一个很好用的方法来查找某个类型的文件,它接受一个路径作为参数,返回所有匹配到的文件类型是list,并且glob方法提供模糊匹配的方式,可以查找到自己想要类型的文件。例如,查找路径“D:\”下的所有.txt文件,只需要写下语句glob.glob(D:\*txt),就会找到路径“D:\”下的所有txt类型文件,并以列表的形式返回,这里的“*”是一个通配符,可以匹配0个或者多个字符。通过这种方式可以匹配到所有后缀名为.txt的文件,另外,glob.glob()方法返回的是list。实例十二使用glob模块查找文件路径。如在工作目录(D:\python\ch06)下编写一个名为test12.py程序,使用glob模块查找当前工作目录下的txt文件。importglob #导入glob模块path="D:\*\ch06\"

#第一级目录忘记了,用*模糊匹配foriinglob.glob(path+"*"): #输出该目录下所有的文件,用*模糊匹配print(i)print(glob.glob(path+"*.txt")) #输出目录下后缀名为.txt的文件6.4路径和文件操作6.4.3shutil模块shutil模块是对os模块中文件操作的进一步补充,是Python自带的关于文件、文件夹、压缩文件的高层次的操作工具。shutil模块中提供了文件复制的方法copy()和文件移动剪切的方法move(),它们都带有两个参数,第一个参数是原文件路径,第二个参数是目的文件路径。实例十三使用shutil模块对文件进行移动和复制。如在工作目录(D:\python\ch06)下编写一个名为test13.py程序,使用shutil模块对student.txt文件移动和news.txt文件复制到指定文件夹中。实现思路:首先用os.mkdir方法在同一工作目录(D:\python\ch06)下创建“move文件夹”和“copy文件夹”。接着用shutil.copy()方法将news.txt文件复制粘贴到“copy文件夹”路径下,再用shutil.move()方法将student.txt文件剪切粘贴到“move文件夹”路径下,最后,使用glob.glob()方法显示目录文件。importshutil #导入shutil模块importos #导入os模块importglob #导入glob模块path="D:\python\ch06\"

#确定路径os.mkdir(path+"move文件夹\") #创建move文件夹os.mkdir(path+"copy文件夹\") #创建copy文件夹shutil.move(path+"student.txt",path+"move文件夹/student.txt") #剪切粘贴student.txtshutil.copy(path+"news.txt",path+"copy文件夹/news.txt") #复制粘贴news.txtforfileinglob.glob(path+"*\*"):

#显示目录文件print(file)【任务实现】任务二优化党员信息管理系统

经过前面章节编写了党员信息管理系统,并增加了登陆系统验证功能,系统的安全性有了,但系统运行使用时的稳定性也是我们开发者不能忽略的。

本次的任务是优化党员信息管理系统,让程序更加健壮,利用异常处理机制预防程序运行过程中出现的各种未知异常,避免程序崩溃,提供给用户友好的使用体验。【提示】

因不能确定程序运行中可能会出现的异常,所以使用异常类的基类BaseException对异常处理。6.5错误与异常6.5.1语法错误

语法错误,也称作解析错误,是学习Python过程中最常见的。下面的代码中print()函数有拼写错误。>>>printf(hello,world)Traceback(mostrecentcalllast): File"<pyshell#0>",line1,in<module> printf(hello,world)NameError:name'printf'isnotdefined6.5错误与异常6.5.2异常

异常是在程序运行过程中发生的非正常事件,这类事件可能是程序本身的设计错误,也可能是外界环境发生了变化导致,如网络连接不通、算术运算出错、遍历列表超出范围、导入的模块不存在等,异常会中断正在运行的程序。实例十四编写一个计算学生平均成绩功能的函数程序。deffunave(s=[],n=[]):ave=sum(s)/(len(n)-1)print("平均分是:",ave)score=[]member=1while(member!=0):member=int(input('请输入学生成绩(0为结束):'))score.append(member)name=[]member=""while(member!="#"):member=input('请输入学生姓名(#为结束):')name.append(member)funave(score,name)6.5错误与异常6.5.3常见异常6.6异常处理

异常处理就像人们平时对可能遇到的意外情况,预先想好了一些处理方法,若发生了异常,程序会按照预定的处理方法对异常进行处理,异常处理完毕后,程序继续运行。6.6异常处理6.6.1使用try-except处理异常实例十五编写一个使用try-except处理异常的程序,改进例6-14程序,对输入数据时粗心的工作做一下预防,也对可能发生异常的地方做一下补救,让程序不会因产生异常导致崩溃。deffunave(s=[],n=[]):try:ave=sum(s)/(len(n)-1)print("平均分是:",ave)exceptZeroDivisionError:print("出现了被0除的情况,可能没输入学生姓名,请重新试试")else:print("运行成功")score=[]member=1while(member!=0):member=int(input('请输入学生成绩(0为结束):'))score.append(member)name=[]member=""while(member!="#"):member=input('请输入学生姓名(#为结束):')name.append(member)funave(score,name)运行程序没有出错,根据提示输入如下内容时:请输入学生成绩(0为结束):70请输入学生成绩(0为结束):80请输入学生成绩(0为结束):0请输入学生姓名(#为结束):#程序输出结果:出现了被0除的情况,可能没输入学生姓名,请重新试试实例十六在例6-15程序的funave()函数中添加功能,要求在输出的结果中可以显示每一位同学高于或者低于平均分多少分。deffunave(s=[],n=[]):try:ave=sum(s)/(len(n)-1)print("平均分是:",ave)foriinrange(len(s)):print("%s比平均分相差:%d"%(n[i],s[i]-ave))exceptZeroDivisionError:print("出现了被0除的情况,可能没输入学生姓名,请重新试试")else:print("运行成功")score=[]member=1while(member!=0):member=int(input('请输入学生成绩(0为结束):'))score.append(member)name=[]member=""while(member!="#"):member=input('请输入学生姓名(#为结束):')name.append(member)funave(score,name)运行程序没有出错,根据提示输入如下内容时:请输入学生成绩(0为结束):80请输入学生成绩(0为结束):70请输入学生成绩(0为结束):0请输入学生姓名(#为结束):叶子请输入学生姓名(#为结束):#程序输出结果:IndexError:listindexoutofrange实例十七改良例6-16程序,上例中只对除数是0的异常进行处理,没有对索引出界的异常进行处理,由于无法确定到底还会有哪种类型的异常出现,在本例中使用BaseException(常规错误的基类)来对除了ZeroDivisionError之外的所有异常做统一处理。deffunave(s=[],n=[]):try:ave=sum(s)/(len(n)-1)print("平均分是:",ave)foriinrange(len(s)):print("%s比平均分相差:%d"%(n[i],s[i]-ave))exceptZeroDivisionError:print("出现了被0除的情况,可能没输入学生姓名,请重新试试")exceptBaseExceptionase: #e是的一个实例对象print("出现了%s异常,请仔细检查"%e)else:print("运行成功")score=[]member=1while(member!=0):member=int(input('请输入学生成绩(0为结束):'))score.append(member)name=[]member=""while(member!="#"):member=input('请输入学生姓名(#为结束):')name.append(member)funave(score,name)运行程序没有出错,根据提示输入如下内容时:请输入学生成绩(0为结束):80请输入学生成绩(0为结束):70请输入学生成绩(0为结束):0请输入学生姓名(#为结束):叶子请输入学生姓名(#为结束):#程序输出结果:平均分是:150.0叶子比平均分相差:-70#比平均分相差:-80出现了listindexoutofrange异常,请仔细检查6.6异常处理6.6.2使用try-except-finally处理异常实例十八在例6-17程序的funave()函数中添加功能,要求无论输入什么内容,都能输出时间。importdatetimedeffunave(s=[],n=[]):try:ave=sum(s)/(len(n)-1)print("平均分是:",ave)foriinrange(len(s)):print("%s比平均分相差:%d"%(n[i],s[i]-ave))exceptZeroDivisionError:print("出现了被0除的情况,可能没输入学生姓名,请重新试试")exceptBaseExceptionase: #e是的一个实例对象print("出现了%s异常,请仔细检查"%e)else:print("运行成功")

温馨提示

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

评论

0/150

提交评论