《Python程序设计》 课件 张小志 项目7、8 函数应用、文件操作_第1页
《Python程序设计》 课件 张小志 项目7、8 函数应用、文件操作_第2页
《Python程序设计》 课件 张小志 项目7、8 函数应用、文件操作_第3页
《Python程序设计》 课件 张小志 项目7、8 函数应用、文件操作_第4页
《Python程序设计》 课件 张小志 项目7、8 函数应用、文件操作_第5页
已阅读5页,还剩199页未读 继续免费阅读

下载本文档

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

文档简介

项目7函数应用了解函数的概念及作用01理解函数的模块化设计思想02掌握函数的定义和调用方法03知识目标理解return语句的作用和用法05理解函数的局部变量和全局变量06理解函数的递归和嵌套用法07理解函数的参数传递方式04能够根据功能需求定义函数01能够根据功能需求定义嵌套函数。02能够运用不同的方式传递函数参数03能力目标能够熟练运用匿名函数04能够熟练运用递归函数解决复杂的问题05能够处理函数的异常和错误06目录简易计算器设计任务1汽车进销存管理系统设计任务2汉诺塔游戏设计任务3

任务1简易计算器设计任务提出01任务分析02知识准备03任务实现04任务总结05任务提出Part.01提出任务运用PyCharm开发工具编写Python程序,设计一个简易的计算器,要求该计算器能实现两个数字的加、减、乘、除(+、-、*、/)运算等功能,其中每一种运算都要求通过调用函数来完成。任务分析Part.02分析任务1.创建Python程序cal.py。2.设计命令行用户界面,向用户展示可用的运算选项。3.为加、减、乘、除每一种运算设计一个运算函数。4.通过input函数接受用户的输入,调用相应的函数进行计算。5.运行测试程序,通过验证输出的计算结果来测试程序。该任务主要完成的是两个数字的加、减、乘、除运算,在运行的过程中,根据用户选择的运算来调用不同的函数完成计算,并给出计算结果。知识准备Part.03函数概述01函数的定义02函数调用03知识准备函数的嵌套定义04函数是组织好的、实现单一功能或相关联功能,并可以重复使用的代码,这段代码已经被提前编写好了,并且为其起一个“好听”的名字。在后续编写程序过程中,如果需要同样的功能,直接通过起好的名字就可以调用这段代码。函数概述Python中的函数可以分为内置函数、标准库函数、第三方库函数和用户自定义函数等几种类型。内置函数:Python语言自带的函数,可以直接在任何Python程序中使用,无需导入任何库。标准库函数:Python的标准库包含了许多模块,这些模块提供了大量的函数来处理各种常见任务。要使用这些函数,需要首先导入相应的模块。例如,math模块提供了各种数学函数,如sqrt()、sin()、cos()等,OS模块则提供了与操作系统交互的函数,如exists()、listdir()等。函数概述第三方库函数:除了标准库之外,还有许多第三方库可供Python程序员使用。这些库通常需要通过包管理器pip进行安装,然后才能在程序中使用。例如numpy库提供了大量的数值计算函数,pandas库提供了数据处理和分析的函数,matplotlib库提供了绘图函数等。用户自定义函数:除了使用内置函数和库函数之外,Python还允许程序员根据特定的需求定义自己的函数。函数概述函数的定义,也就是创建一个函数,可以理解为创建一个具有某些用途的工具。Python中使用关键字def来定义函数,其语法格式如下:函数的定义标记函数的开始函数的唯一标识传入函数中的数据可以包含一个或多个参数也可以为空标记函数体的开始实现函数功能的具体代码返回函数的处理结果给调用方标志着函数的结束,若函数没有返回值,可以省略注意,在创建函数时,即使函数不需要参数,也必须保留一对空的“()”,否则Python解释器将提示“invaildsyntax”错误。另外,如果想定义一个没有任何功能的空函数,可以使用pass语句作为占位符。函数的定义#定义个空函数,没有实际意义defpass_fun_():pass函数在定义完成后不会立刻执行,直到被程序调用时才会执行。函数调用语法格式如下:函数调用例如:area()#无参函数area_modify(9,7)#有参函数函数名([参数列表])程序在调用函数的位置暂停执行,将数据传递给函数参数;执行函数体中的语句;程序回到暂停处继续执行。函数调用过程area()area_modify(9,7)例如调用过程area_modify(9,7)defarea_modify(a,b):

s=a*b

print(s)①②③④注意:函数调用函数的使用必须遵循先定义,后调用原则没有事先定义函数,而直接引用函数名,就相当于在引用一个不存在的变量名函数定义阶段:只检测函数体的语法,不执行函数体代码函数调用阶段执行代码说明:函数调用在函数定义阶段括号内没有参数注意:定义无参,意味着调用时也无需传入参数应用:如果函数体的代码逻辑不需要依赖外部传入的值,必须定义无参函数(1)无参函数说明:函数调用在函数定义阶段括号内有参数,称为有参函数注意:定义时有参,意味着调用时也必须传入参数应用:如果函数体代码逻辑需要依赖外部传入的值,必须定义成有参函数(2)有参函数函数在定义时可以在其内部嵌套定义另外一个函数,嵌套的函数称为外层函数,被嵌套的函数称为内层函数。函数的嵌套定义defouter():print("这是外层函数")

definner():print("这是内层函数")outer()例如:这是外层函数运行结果如下:由运行结果可知,程序没有执行内层函数的打印语句,只输出了外层函数的打印语句。这说明内层函数没有被调用。函数的嵌套定义defouter():

print("这是外层函数")

definner():

print("这是内层函数")

inner()#在outer函数中调用inner()函数outer()将上面的代码修改如下:这是外层函数这是内层函数运行结果如下:任务实现Part.04分析代码01编写代码02任务实现1.分析代码任务实现根据任务的功能需求,自定义4个函数add()、subtract()、multiply()、divide(),分别实现加法、减法、乘法和除法功能,每个函数定义两个参数,用于接收参与运算的2个数字,并将运算结果作为函数的返回值。在执行除法运算时,需要考虑除数是否为0的情况,以免出现程序异常。1.分析代码任务实现使用while循环语句保障程序持续运行,直至用户选择退出系统为止。在while循环体中包含三个部分:1)使用print()函数输出简易计算器的操作界面,并使用input()函数接收用户的输入。2)根据用户的功能选择和计算的数字,调用对应的函数进行计算,并输出计算结果。3)通过break语句结束程序运行。2.

编写代码(1)任务实现defdivide(x,y):"""除法运算"""

ify!=0:returnx/yelse:return"除数不能为零"defadd(x,y):"""加法运算"""

returnx+ydefsubtract(x,y):"""减法运算"""

returnx-ydefmultiply(x,y):"""乘法运算"""

returnx*y2.

编写代码(2)任务实现whileTrue:

print("------------简易计算器-------------\n选择一个运算:")

print("1.加法")

print("2.减法")

print("3.乘法")

print("4.除法")

print("5.退出")

choice=input("输入选项编号:")2.

编写代码(3)任务实现ifchoicein('1','2','3','4'):num1=float(input("输入第一个数:"))

num2=float(input("输入第二个数:"))

ifchoice=='1':print(f"结果:{add(num1,num2)}")elifchoice=='2':print(f"结果:{subtract(num1,num2)}")elifchoice=='3':print(f"结果:{multiply(num1,num2)}")elifchoice=='4':print(f"结果:{divide(num1,num2)}")elifchoice=='5':print("退出程序.")

breakelse:print("无效的选项,请重新输入。")任务总结Part.05通过本任务的学习,掌握了函数的作用、类型,以及函数的定义、调用方法。在定义和调用函数时,需要注意以下几点:函数命名:函数名应该遵循Python的标识符命名规则,一般使用小写字母和下划线的组合,应该能够简单、清晰地表达函数的功能。嵌套定义:定义嵌套函数时,在嵌套的外层函数体外,无法调用嵌套的内层函数。参数匹配:在调用函数时,必须提供正确数量和类型的参数。如果参数数量或类型不匹配,Python会报错。返回值:函数可以通过return语句返回一个值。如果没有return语句,或者return后面没有跟任何值,那么函数会返回None。 嵌套定义:定义嵌套函数时,在嵌套的外层函数体外,无法调用嵌套的内层函数。文档字符串:可以为每个函数添加文档字符串,以描述函数的功能、参数和返回值。有助于其他人理解代码和后期代码的维护。 任务提出01任务分析02知识准备03任务2汽车进销存管理系统设计任务实现04任务总结05任务1打印树形图案任务提出Part.01提出任务运用PyCharm开发工具编写Python程序,设计一个简单的进销存管理系统,用于实现汽车4S店的进销存业务管理,需要维护的汽车信息包括汽车品牌、颜色、价格、数量等。系统具有添加、删除、修改、查询汽车信息以及退出功能,任务分析Part.02分析任务1.创建Python程序car.py。2.定义一个列表用于存放所有的汽车信息。3.设计系统操作界面,接收用户的输入操作。4.根据功能模块设计要求,为每项功能编写函数,在函数主体中设计业务处理逻辑。5.根据用户的功能选择,调用并传递参数给不同的模块函数,实现业务功能。6.运行测试程序,逐项测试各项功能是否正常。该任务主要实现的是汽车信息添加、修改、删除、查询等功能,可以根据功能设计不同的功能模块函数,通过调用模块函数并传递相应参数实现业务处理知识准备Part.03位置参数传递01关键字参数传递02默认值参数传递03知识准备可变参数传递04混合参数传递05函数的返回值06变量作用域07通常将定义函数时设置的参数称为形式参数(简称为形参),将调用函数时传入的参数称为实际参数(简称为实参)。函数的参数传递是指将实际参数传递给形式参数的过程。函数参数传递形参实参函数在被调用时会将实参按照相应的位置依次传递给形参,也就是说将第一个实参传递给第一个形参,将第二个实参传递给第二个形参,以此类推。位置参数传递注意:位置参数传递位置参数:按位置指定,实参和形参数量必须⼀致函数调⽤时括号中只写各个实参,这时形参的值与实参按照顺序⼀⼀对应在调⽤函数,指定的实际参数的数量,必须和形式参数的数量⼀致(传多传少都不行)关键字参数的传递是通过“形参=实参”的格式将实参与形参相关联,将实参按照相应的关键字传递给形参。关键字参数传递传递方式的限定无论实参采用位置参数的方式传递,还是关键字参数的方式传递,每个形参都是有名称的,怎么区分用哪种方式传递呢?符

号“/”传递方式的限定Python在3.8版本中新增了仅限位置形参的语法,使用符号“/”来限定部分形参只接收位置传递方式的实参。deffunc(a,b,/,c):print(a,b,c)

表示在/形参前的参数只能通过位置参数传递。Python允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。默认参数传递默认参数传递不传参默认参数传递传参调用函数函数调用形式不传参,调用函数就直接使用默认值。传参,在调用时可以重新给予默认值的参数

通过位置传参方式给值

通过关键词传参方式给值1.参数能不能全部定义为默认参数?函数调用形式2.默认参数位置会不会受约束呢?参数全部定义为默认参数默认参数位置变化注意:默认参数传递函数在定义时可以指定各参数的默认值;默认参数和其它参数同时存在,默认参数必须位于必选参数的后面。如果函数在定义时无法确定需要接收多少个数据,那么可以在定义函数时为形参添加“*”或“**”:可变参数的传递“*”:接收以元组形式打包的多个值“**”:接收以字典形式打包的多个值1.打包“*”定

义deff1(*args):print(args)#输出参数的值调

用f1()#f1(‘a’,‘e’,‘u’,‘i’,‘o’)结

果()(‘a’,‘e’,‘u’,‘i’,‘o’)可变参数传递2.打包“**”定

义deff2(**kwargs):print(kwargs)#输出参数的值调

用f2(name=‘john’,height=180,weight=70)f2()结

果{'name':'john','height':180,'weight':70}{}可变参数传递可变参数传递函数中添加“*”或“**”的形参可以是符合命名规范的任意名称,建议使用*args和**kwargs。若函数没有接收到任何数据,参数*args和**kwargs为空,即为空元组或空字典。

*的作用:在函数定义中,收集所有位置参数到一个新的元组,并将整个元组赋值给变量args。**

的作用:在函数定义中,收集关键字参数到一个新的字典,并将整个字典赋值给变量kwargs。可变参数传递1.实参是元组,可以使用“*”拆分成多个值,按位置参数传给形参。2.实参是字典,可以使用“**”拆分成多个键值对,按关键字参数传给形参。函数调用时——实参1.解包“*”定

义deffun1(c1,c2,c3,c4,c5):print(c1,c2,c3,c4,c5)调

用chs=(‘a’,‘e’,‘u’,‘i’,‘o’)fun1(*chs)结

果‘a’,‘e’,‘u’,‘i’,‘o’可变参数传递2.解包“**”定

义deffun2(name,height,weight):print(name,height,weight)调

用boy={'name':'john','height':180,'weight':70}

fun2(**boy)结

果john18070可变参数传递1.先按照参数的位置传递。2.再按照参数的关键字传递。3.最后按打包的形式传递。混合参数传递注意:定义函数时参数有默认值,则带有默认值的参数必须跟在必选参数的后面。混合参数传递func(1,2)#按位置传递方式将1、2赋值给a、b,c采用默认值0func(1,2,c=3)#按位置传递方式将1、2赋值给a、b,将3赋值给c#a=1b=2c=3args=()kw={}func(1,2,3,‘x',‘y')#a=1b=2c=3args=(‘x',‘y')kw={}func(1,2,3,‘x',‘y',s=100)#a=1b=2c=3args=('a','b')kw={‘s':100}函数返回值函数中的return语句会在函数结束时将数据返回给程序,同时让程序回到函数被调用的位置继续执行。defadd(num1,num2):res=num1+num2returnres#returnnum1,num2

如果函数使用return语句返回了多个值,那么这些值将被保存到元组中。一般格式为return[返回值]函数返回值如果函数没有返回值,即函数执行完毕后,不需要给调用处提供数据,那么return可以省略不写。函数的返回值,如果是一个,直接返回原类型。函数的返回值如果是多个,返回的值为元组。函数返回值局部变量局部变量和全局变量定义:局部变量,就是在函数内部定义的变量约束:其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的。全局变量局部变量和全局变量定义:在函数外边定义的变量叫做全局变量。范围:全局变量能够在所有的函数中进行访问。局部变量和全局变量访问修改局部变量和全局变量1.局部变量和全局变量定义的位置不同,作用域不同。2.全局变量在函数内部只能被访问,而无法直接修改。1.global关键字global和nonlocal关键字使用global关键字可以将局部变量声明为全局变量,其使用方法如下:global变量名like1=10#like1在这里是一个全局变量deffunc():

globallike1#like1声明时,不能直接赋值。like1+=20#函数内部修改变量like1print('函数内部修改后:',like1)2.nonlocal关键字global和nonlocal关键字使用nonlocal关键字可以在局部作用域中修改嵌套作用域中定义的变量,其使用方法如下:nonlocal变量名deftest():number=10deftest_in():

nonlocalnumbernumber=20test_in()print(number)test()任务实现Part.04分析代码01编写代码02任务实现1.分析代码任务实现(1)定义列表car_info用于保存所有的汽车信息,列表的元素为字典,字典中设置brand、color、price、num四个键分别对应汽车的品牌、颜色、价格、数量信息。(2)定义main_menu()函数,用于输出系统的功能界面。(3)定义input_car_info()、add_car_info()、del_car_info(car)、modify_car_info()、show_car_info()功能函数用于实现录入汽车信息、添加汽车信息入库、修改已有汽车信息、删除指定汽车信息、查询全部汽车信息等功能。(4)在main()函数中,调用main_menu()函数,并接收用户的功能选择,调用相应的功能函数。定义列表输出用户操作界面任务实现2.编写代码启动PyCharm,在项目文件夹Chapter07中新建Python文件car.py录入汽车信息函数添加汽车信息函数任务实现2.编写代码删除汽车信息函数修改汽车信息函数任务实现2.编写代码显示所有的汽车信息函数任务实现2.编写代码主函数任务实现2.编写代码任务总结Part.05通过本任务的学习,系统掌握Python中参数的传递方法、不同类型返回值以及变量的作用域的灵活应用。在使用是需要注意以下几点。参数命名:参数名应该尽量清晰、简洁,并准确描述参数的作用;避免使用Python中的保留关键字作为参数名;遵循Python的命名惯例,使用小写字母和下划线来分隔单词。参数类型:Python是一种动态类型语言,所以函数的参数不需要预先声明类型。位置参数与关键字参数:在调用函数时,可以使用位置参数(按照参数在函数定义中的顺序传递)或关键字参数(通过参数名明确指定)。使用关键字参数可以提高代码的可读性,并允许在调用函数时改变参数的顺序。默认参数:可以为函数参数提供默认值,在调用函数时可以省略这些参数。如果带有默认值的参数与必选参数同时存在,则带有默认值的参数必须位于必选参数的后面。可变参数与关键字参数:使用*args可以接收任意数量的位置参数,它们被打包为一个元组。使用**kwargs可以接收任意数量的关键字参数,它们被打包为一个字典。当同时使用*args和**kwargs时,*args必须放在**kwargs前面。参数验证:建议在函数内部对传入的参数进行验证,确保参数的数据类型、取值范围等是符合预期的,对于不符合预期的参数值,可以提前抛出异常。变量重名:为了避免变量名称冲突,在同一作用域中不能有重名,但是不同的作用域内可以重名。如果在函数内部定义了一个与全局变量同名的局部变量,那么在函数内部访问该变量时,将优先使用局部变量,而不是全局变量。变量作用域:在函数内部,如果要修改全局变量,需要使用global关键字进行声明。否则,Python会将其视为一个新的局部变量。在嵌套函数(内部函数)中,可以直接访问外部函数(外部作用域)的局部变量,但是,外部函数不能直接访问嵌套函数的局部变量。任务提出01任务分析02知识准备03任务3汉诺塔游戏设计任务实现04任务总结05任务1打印树形图案任务提出Part.01提出任务汉诺塔游戏是一个经典递归问题。假设有n个圆盘,编号从1到n,初始时按照从大到小的顺序依次放置在A柱上,较大的圆盘在下,较小的圆盘在上。目标是将这些圆盘移动到C柱上,移动过程中可以借助B柱,但是在移动过程中大圆盘不能放到小圆盘上、每次只能移动一个圆盘,如图所示。运用PyCharm开发工具编写Python程序,完成圆盘从A柱到C柱的移动,并显示移动过程。任务分析Part.02分析任务1.创建Python程序hanoi.py。2.创建递归函数。在递归函数中,记录每一次移动的步骤。3.使用input()函数接受需要移动的盘子数量。4.调用递归函数,实现盘子的移动,输出盘子移动的过程。5.运行测试,检验是否正确完成移动。本任务主要完成的是将A柱上所有的圆盘按照要求移动到C柱上,要解决这个问题,可以使用递归函数。具体的任务实施分析如下:知识准备Part.03匿名函数定义01匿名函数的应用02知识准备递归函数03递归函数经典应用04匿名函数是一类无须定义标识符的函数,它与普通函数一样可以在任何地方使用,python中使用lambda关键字定义匿名函数。语法格式如下:匿名函数定义lambda<形式参数列表>:<表达式>匿名函数与普通函数的主要区别如下:匿名函数定义普通函数定义时有名称函数体中包含有多条语句实现比较复杂的功能能被其他程序使用匿名函数匿名函数没有名称函数体只能是一个表达式实现的功能比较简单不能被其他程序使用定义好的匿名函数不能直接使用,最好使用一个变量保存它,以便后期可以随时使用这个函数。匿名函数定义示例#定义匿名函数,并将它返回的函数对象赋值给变量temptemp=lambdax:x**3temp(10)匿名函数跟函数一起使用,根据字符串长度进行排序。匿名函数的应用示例lst=['天宫一号','神州十三号','嫦娥号','北斗导航系统']print(sorted(lst,key=lambdas:len(s)))函数在定义时可以直接或间接地调用其他函数。若函数内部调用了自身,则这个函数被称为递归函数。递归函数递归函数在定义时需要满足两个基本条件:一个是递归公式,另一个是边界条件。其中:递归函数递归公式:是求解原问题或相似的子问题的结构;边界条件:是最小化的子问题,也是递归终止的条件。递归函数的执行可以分为以下两个阶段:递归函数1.递推:递归本次的执行都基于上一次的运算结果。2.回溯:遇到终止条件时,则沿着递推往回一级一级地把值返回来。递归函数的一般定义格式如下所示:def函数名([参数列表]): if边界条件:

return结果 else:

return递归公式递归函数经典应用阶乘n!n!=1*2*3*…*n,可以分为以下两种情况:1.当n=1时,所得的结果为1。2.当n>1时,所得的结果为n*(n-1)!。实现deffunc(num):ifnum==1:return1else:returnnum*func(num-1)num=int(input("请输入一个整数:"))result=func(num)print("5!=%d"%result)边界条件递归公式递归函数经典应用阶乘n!5!求解过程任务实现Part.04分析代码01编写代码02任务实现1.分析代码任务实现1)如果n=1,即只有一个盘子,则直接从A柱移动到C柱。2)如果n>1,即盘子数量大于1,则需要按照以下步骤进行:(1)首先将n-1个盘子从A柱移动到B柱,使用C柱作为辅助。(2)然后将第n个盘子从A柱移动到C柱。(3)再将n-1个盘子从B柱移动到C柱,使用A柱作为辅助。通过分析任务要求可知,先定义递归函数hanio(),用n,A,B和C作为函数参数。n代表盘子数量,A、B、C代表三个柱子。按照移动规则的要求,盘子移动过程如下:2.编写代码任务实现通过本任务的学习,重点掌握了匿名函数和递归函数的用途以及用法。在使用这两种函数时需要注意以下几点:lambda函数的主体只能包含一个表达式,不能包含复杂的语句或循环语句。lambda函数可以接收任意数量的参数,但通常建议用于处理少量参数的情况。如果逻辑复杂或参数较多,建议使用普通函数。lambda函数总是返回一个值,如果没有显式返回,则默认返回None。通过本任务的学习,重点掌握了匿名函数和递归函数的用途以及用法。在使用这两种函数时需要注意以下几点:递归函数必须有一个或多个明确的退出条件,否则,递归将无限进行下去。Python默认的递归深度限制相对较低(通常是1000),这可能会限制递归函数的应用范围。如果需要处理更深的递归,可以通过sys.setrecursionlimit(limit)来增加递归深度限制。项目8文件操作了解文件的打开和关闭方法01了解对文件读写的方法02熟悉文件定位读写的概念03知识目标熟悉文件的重命名和删除操作04熟悉文件夹的相关操作05理解基于维度的数据分类06熟悉一二维数据的存取与读取方式07熟悉多维数据的格式化方法08能够完成文件的打开和关闭操作01能够使用不同的读取方式读取文件内容02能够完成使用文件的定位读写03能力目标能够对文件进行重命名和删除操作04能够完成文件夹的基本操作05能够熟练完成一二维数据的存储与读取操作06目录文件内容复制任务1文件批量重命名任务2文件数据读写任务3任务提出01任务分析02知识准备03任务1文件内容复制任务实现04任务总结05任务1打印树形图案任务提出Part.01提出任务PyCharm开发工具编运用写Python程序,实现将一个TXT文件的内容复制到另一个TXT文件中的功能,要求在新文件中给每一行加上行标,如图所示。提出任务完成效果旧文件新文件任务分析Part.02任务分析创建Python程序文件copy.py。打开原始文件和新文件。将原始文件的内容逐行读取出来,并加上行号将带行号的数据写入到新文件。关闭所有打开的文件,如果使用with打开,则不用再使用close()关闭。6.运行测试程序,检验数据是否正确写入到新文件中。本任务是对TXT文件的内容进行复制,涉及到对两个文件的打开、读取、写入、关闭等操作。具体的任务实施分析如下:知识准备Part.03文件打开和关闭01文件数据读写02文件定位读写03知识准备打开文件01关闭文件02上下文管理语句038.1文件打开和关闭打开文件open函数打开文件,其语法格式如下:open(filepath[,mode])filepath:必填,可以是文件名,可以包含路径。

例如:C:\Users\hello.txt,如果文件在当

前路径下,可以直接写文件名hello.txt。mode:文件的打开模式。打开文件文件的打开模式关闭文件close()函数关闭文件,其语法格式如下:file.close()file:文件对象。

例如:打开文件a.txt,执行完相应操作以后将文件关闭。

file=open(a.txt)

……

file.close()上下文管理语句在Python中访问文件资源时,可以使用with语句对文件资源进行自动管理。with语句的语法格式如下:withcontext_expression[asvariable]:with-blockcontext_expression:返回一个上下文管理器对象。例如使用with语句打开‘hello.txt‘文件。withopen('hello.txt','r')asfile:……#文件在这里被自动关闭。例:以r、w、a打开test.txt文件,并且关闭。以“r”方式打开

file=open("test.txt","r")

file.close()以“w”方式打开

file=open("test.txt",“w")

file.close()以“a”方式打开

file=open("test.txt",“a")

file.close()

课下可以练习以r+、w+,a+的模式打开文件。读文件01写文件028.2文件数据读写读文件方式一:read()方法读取文件,其语法格式如下:file.read(size)file:文件对象。size:表示要读取多少个字节的数据;可以省略,如果省略会将文件中所有的数据都读出来。

例:读取file指向的文件内容。

file.read()方式二:readlines()方法读取文件,其语法格式如下:file.readlines()file:文件对象。readlines将整个文件的数据一次性读出,返回一个列表。

例:读取file指向的文件内容。

file.readlines()读文件方式三:readline()方法读取文件,其语法格式如下:file.readline()file:文件对象。readline是一行一行的读取文件数据,需要注意的是读完一行文件指针会自动移到下一行。

例:读取file指向的文件内容。

file.readline()读文件写文件write函数用来完成文件的写入,每次会将write写入的内容追加到文件末尾,其语法格式如下:file.write(要写入的内容)file:文件对象。

例:将helloworld写入file指向的文件中。

file.write(“helloworld”)写文件例:打开test.txt文件,将helloworld写入文件中。打开文件

file=open("test.txt",“w")写入

file.write(“helloworld”)关闭

file.close()写文件例:以3种不同的方式将test.txt的内容读出并且打印。

方式一打开文件

file=open("test.txt",“r")读取

content=File.read()

print(content)关闭

file.close()方式二打开文件

file=open("test.txt",“w")读取

foriinfile.readlines():

print(i)关闭

file.close()读文件例:以3种不同的方式将test.txt的内容读出并且打印。方式三打开文件file=open("test.txt",“w")读取

content=File.readline()

print(content)关闭

file.close()tell()方法01seek()方法028.3文件定位读写tell()方法从前面学习的读写操作实例中可以看到,文件在进行读写操作时都是连续的,按照顺序进行的,程序总是从上次读写的位置继续向下读写。但是实际应用中,可能需要特定位置开始读写,这时就需要使用“文件读写位置”的属性获取文件位置,或者定位到文件的制定位置。具体的使用的方法是:tell()seek()tell():在读写文件时,如果想获取文件当前读写到哪个位置,可以使用tell()方法获取。其语法格式如下:file.tell()file:文件对象。

例:获取文件当前位置

file=open(“test.txt”)

file.tell()tell()方法seek()方法seek():指定文件的读写位置。其语法格式如下:file:文件对象。offset:表示偏移量,也就是需要移动的字节数。whence:表示方向,该参数的值有三个:

0:表示文件开头。

1:表示使用当前读写位置。

2:表示文件末尾。

例:指定文件的读写位置,从文件开头,偏移5个字节。

file=open(“test.txt”)

file.seek(5,0)file.seek(offset[,whence])seek()方法例:打开test.txt文件,将helloworld写入文件中,使用tell方法获取写入前和写入后的位置。打开文件

file=open("test.txt",“r")

posi=file.tell()

print(“当前位置是”,posi)写入

file.read(5)

posi=file.tell()

print(“当前位置是”,posi)

file.close()定位读文件例:以3种不同的方向对test.txt进行定位,并且读出5个字节的数据。方式一file=open("test.txt",“r")file.seek(5,0)file.read(5)file.close()#关闭方式二file=open("test.txt",“r")file.seek(3,1)Print(file.read(5))file.seek(3,1)Print(file.read(5))file.close()#关闭方式三file=open("test.txt",“r")file.seek(5,2)Print(file.read(5))file.close()#关闭任务实现Part.04分析代码01编写代码02任务实现分析代码特点1需要将原始文件的内容全部复制到新文件中。每行开头添加行标。观察效果图,找到特点:特点2分析代码第一步:使用open()函数只读模式打开原始文件test.txt、写入模式创建并打开文件new_test.txt。第二步:使用readlines()方法读取文件test.txt中的全部内容,并返回一个字符串列表,每行作为列表的一个元素。第三步:使用for循环遍历字符串列表,在每行内容前加入行标,并运用write()函数写入新文件中。第四步:最后关闭原始文件和新文件,如果用with语句打开,第四步可以省略。代码思路:(1)启动PyCharm,新建Python项目copy,新建Python文件copy.Py编写代码(2)输入代码任务总结Part.05通过本任务的学习,系统掌握了在Python中进行文件的打开、关闭、写入以及定位读写的方法。使用with语句可以确保文件在操作完成后被自动关闭,即使发生异常也会关闭文件。在执行文件读写操作时,需要捕获和处理可能发生的异常,例如文件不存在或没有写入权限等。使用seek()方法进行移位操作时,当whence参数为1和2时,需要以二进制模式打开文件,否则会出现类似io.UnsupportedOperation:can‘tdononzerocur-relativeseeks的错误。任务提出01任务分析02知识准备03任务2文件批量重命名任务实现04任务总结05任务1打印树形图案任务提出Part.01提出任务运用PyCharm开发工具编写Python程序,实现文件批量重命名的功能,文件批量重命名的方式有两种:一是给文件名添加字符、二是删除文件名中的字符,批量重命名前后文件名对比如图所示。提出任务完成效果旧文件名新文件名请输入您要执行的操作(1-添加字符,2-删除字符):任务分析Part.02任务分析创建Python程序文件rename.py。提示用户选择重命名的方式是增加字符还是删除字符。获取文件夹下需要重命名的文件列表。根据用户的选择对文件进行批量重命名。运行程序,检查文件名是否修改成功。本任务中需要提前准备好批量重命名的文件,然后通过文件重命名方法修改文件名。具体的任务实施分析如下:知识准备Part.03文件管理01文件夹管理02知识准备rename()方法01remove()方法028.4文件管理rename()方法在实际应用中,需要对文件或者文件夹做一些操作,Python的os模块提供了很多函数,可以实现对文件或者文件夹的一些操作,首先看一下文件的重命名和删除函数。文件重命名rename()文件删除remove()文件的重命名格式如下:os.rename(src,dst)os:Python标准库的一个用于访问操作系统功能的模块。src:需要修改的源文件名。dst:修改后的新文件名。

例:将a.txt重命名为new_a.txt

importos

os.rename(“a.txt”,”new_a.txt”)rename()方法文件的删除格式如下:os.remove(path)os:Python标准库的一个用于访问操作系统功能的模块。path:指定文件。

例:将a.txt文件删除。

importos

os.remove(“a.txt”)remove()方法文件夹相关操作018.5文件夹管理文件夹的相关操作文件夹的常见操作包括创建文件夹、获取当前目录、改变默认目录、获取目录列表和删除文件夹。1.创建文件格式:os.mkdir(“文件夹名字”);2.获取当前目录:os.getcwd();3.改变默认目录:os.chdir(“目录”);4.获取目录列表:os.listdir(“目录”);5.删除文件夹:os.rmdir(“文件夹名字”)。文件夹的相关操作

要求:

示例代码:1.获取当前目录;2.列出当前目录下所有的子目录;3.将当前目录下的测试.txt文件重命名为核酸列表.txt;4.创建一个抗疫英雄的文件夹;5.将名为历史.txt文件删除;6.将腾讯健康文件夹删除;7.操作完成以后改变目录为抗疫英雄文件夹。importos

dir=os.getcwd()

print(os.listdir(dir))

os.rename(“测试.txt”,“核酸列表.txt”)

os.mkdir(“抗疫英雄”)

os.remove(“历史.txt”)

os.rmdir(“腾讯健康”)

os.chdir(“抗疫英雄")

print(os.getcwd())任务实现Part.04分析代码01编写代码02任务实现分析代码第一步:使用os.chdir()方法设置当前文件夹。第二步:使用input()函数提示用户选择重命名的方式:添加字符、删除字符。第三步:使用os.listdir()方法获取当前文件夹下的所有文件名称。第四步:根据用户的选择,使用for循环遍历所有文件名,用os.rename()方法逐一对文件名进行重命名操作。代码思路:(1)启动PyCharm,在项目文件夹Chapter08中新建Python文件rename.py(2)输入如下代码:编写代码任务总结Part.05通过本任务的学习,掌握了文件和文件夹操作的常用方法。路径兼容性:不同操作系统(如Windows、Linux、macOS)使用不同的路径分隔符(如\或/),可以使用os.path模块中的函数(如os.path.join)确保路径字符串的跨平台兼容性。绝对路径与相对路径:绝对路径是从文件系统的根目录开始,而相对路径则是相对于当前工作目录或脚本所在的目录。检查文件是否存在:在尝试读取或写入文件之前,可以使用os.path.exists()检查文件是否存在,避免因文件不存在而导致的错误。关闭文件:建议使用with语句来自动管理文件的打开和关闭,可以确保文件在使用完毕后被正确关闭,防止资源泄露。检查文件夹是否存在:在创建新文件夹或向现有文件夹中添加文件之前,可以使用os.path.isdir()检查目标文件夹是否存在。权限问题:注意文件和文件夹的权限设置,应确保程序有足够的权限来读取、写入或删除文件和文件夹,必要时可以使用os.chmod修改权限。异常处理:使用try-except块来处理可能发生的文件读写错误,如FileNotFoundError、PermissionError等,避免程序崩溃。

任务提出01任务分析02知识准备03任务3文件数据读写任务实现04任务总结05任务1打印树形图案任务提出Part.01提出任务运用PyCharm开发工具编写Python程序,读取工资文件Salary.csv的内容,将所有的数据复制到新文件sum.csv中,在最后添加“总工资”列,并计算出每个员工的总工资,如图所示。提出任务完成效果

Salary.csv

sum.csv任务分析Part.02任务分析创建Python程序文件format.py。打开工资文件Salary.csv和汇总文件sum.csv。读取Salary.csv的数据存入列表。增加新一列“总工资”,计算总工资数额。将汇总后的数据写入sum.csv文件。运行程序,打开sum.csv文件查看结果。本任务是对csv文件进行数据的读取与写入,首先需要了解csv文件的存储格式,然后根据要求操作文件内容。具体的任务实施分析如下:知识准备Part.03数据维度01数据存储02知识准备一维数据01二维数据028.6数据维度多维数据03一维数据维度是与事务“有联系”的概念的数量,根据“有联系”的概念的数量,事务可分为一维数据、二维数据和多维数据。一维数据:一维数据是具有对等关系的一组线性数据,对应数学之中的集合和一维数组。在Python中,一维列表、一维元组和集合都是一维数据。一维数据中的各个元素可以通过空格、逗号等分隔。例如某学期学生开设的课程便是一组一维数据,通过逗号分隔,如下所示:

数学,英语,语文,体育,理综二维数据二维数据:二维数据关联参数的数量为2,此种数据对应数学中的矩阵和二维数组,在Python语法中,二维列表、二维元组等都是二维数据。表格是日常生活中最常见的二维数据的组织形式,二维数据也称为表格数据。如下成绩表就是一种表格数据。姓名数学英语语文理综张三120108112243李四105145130230王五146138123240多维数据多维数据:二维数据是一维数据的集合,依次类推,三维数据可以是二维数据的集合。当数据的维度超过两个时,称之为多维数据。例如:2个3行4列的三维列表就是多维数据,如下所示。[[[2,1,6,4],[1,4,3,7],[9,6,5,4]],[[7,7,5,2],[3,1,2,7],[3,6,5,1]]]一维数据存储01二维数据存储028.7数据存储多维数据存储03一维数据存储数据存储:为了方便后续的读写操作,数据通常需要按照约定的组织方式存储在文件中。

一维数据呈线性排列,一般用特殊字符分隔,如下所示:1.使用空格分隔:数学英语语文体育理综2.使用逗号分隔:数学,英语,语文,体育,理综3.使用-分隔:数学-英语-语文-体育-理综一维数据存储注意

温馨提示

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

评论

0/150

提交评论