1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2,#,python,学习,学习网战:,周一,人工智能时代,你为什么一定要学Python?,人工智能时代,你为什么一定要学Python?,3月6日,南京大学官网正式发布新闻,经研究决定,南京大学正式成立人工智能学院。,而人工智能最主要的开发语言就是Python,3,2025/4/28 周一,每一种语言伟大的背后都是有一定的时代背景。,Python 发展历史,Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。,Python 本身也是由诸多其
2、他语言发展而来的,这包括 ABC、Modula-3、C、C+、Algol-68、SmallTalk、Unix shell 和其他的脚本语言等等。,像 Perl 语言一样,Python 源代码同样遵循 GPL(GNU General Public License)协议。,现在 Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。,4,2025/4/28 周一,Python 简介,Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。,Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言
3、的一些标点符号,它具有比其他语言更有特色语法结构。,Python 是一种解释型语言:这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。,Python 是交互式语言:这意味着,您可以在一个Python提示符,直接互动执行写你的程序。,Python 是面向对象语言:这意味着Python支持面向对象的风格或代码封装在对象的编程技术。,Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。,5,2025/4/28 周一,Python 特点,1.易于学习:Python有相对较少的关键字,结构简
4、单,和一个明确定义的语法,学习起来更加简单。,2.易于阅读:Python代码定义的更清晰。,3.易于维护:Python的成功在于它的源代码是相当容易维护的。,4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。,5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。,6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。,7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C+完成那部分程序,然后从你
5、的Python程序中调用。,8.数据库:Python提供所有主要的商业数据库的接口。,9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。,10.可嵌入:你可以将Python嵌入到C/C+程序,让你的程序的用户获得脚本化的能力。,6,2025/4/28 周一,学习,python,的理由,1.从语言排行榜上看,Python虽然是25岁的大叔级编程语言,但是近年来Python反而变得越来越流行,在TIOBE编程语言指数排行榜中,Python的排名从去年的第六名飙升到了第四名:,7,2025/4/28 周一,2.语言本身简洁,优美,功能超级强大,Python的语法非常接近英语,去掉了
6、传统的C+/Java使用大括号来区分一个方法体或者类的形式,而是采用强制缩进来表示一个方法或者类。风格统一,非常优美.而且内置了很多高效的库,打个比方,同样一项工作C语言可能要1000行,java要100行,python可能只要10行.而且从桌面应用,web开发,自动化测试运维,爬虫,人工智能,大数据处理都能做,,3.跨平台,类似很多流行编程语言Java、C+、C都能跨平台而且开源,Python也是如此,由于它是开源的,所以也支持可移植性。你可以随处运行Python,换句话说你在window上写的代码,可以很方便的再linux,mac上运行。,8,2025/4/28 周一,4.非常火爆的社区,
7、Python有非常有名的社区,而且人气很火爆,大家可以去python官网经常逛逛,还有github上搜一下python的帖子,很多开源的库,你能想到的基本都已经有人开发了.而且版本还在不断的迭代.,5.很多有名的大公司在用,国外非常有名的有Google,facebook,Yahoo,YueTube,还有美国宇航局NASA,像著名的开源云计算平台openstack也是用python写的,还有国内的豆瓣也是用python写的.,9,2025/4/28 周一,第二章基础,10,2025/4/28 周一,第一节 环境搭建,环境搭建,下载,python3.6,安装,如下图,,1,2,都要勾选,然后点击,
8、3,选择所有选项,next,上面五个选项框打钩,设置安装路径,并复制(在后面要用到),点击,install,进行安装,安装完成,点击,close,。完成安装,11,2025/4/28 周一,第二节 配置环境变量,配置环境变量:计算机,右键,属性,高级系统设置,环境变量设置系统环境变量,path,粘贴刚才复制的安装路径,(,或者直接找到刚才安装的路径),path,:D:PythonPython36-32Scripts;,path,:D:PythonPython36-32,点击确定,确定,环境就配好了。,pip,异常解决:有时候,pip,不可以使用,,系统环境变量没有问题,这时候就需要,添加用户环
9、境变量,同样是设置增加,path,:D:PythonPython36-32Scripts;,path,:D:PythonPython36-32,12,2025/4/28 周一,第三节,Python,基础一,检查是否安装成功:打开命令窗口,输入,python,,出现,python,版本号,说明安装成功,pip,命令,,python,的,script,目录下。命令窗口,输入,pip,,作用:引入模块,命令:,pip install +,模块名称,13,2025/4/28 周一,第三节,python,基础二,注意事项:,1,、,python,缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的
10、缩进空格数,,记住:空行也是程序代码的一部分。,2,、,python,注释:可以使用单行注释:,#,也可以使用多行注释:,“”“,注释,”“,,或者,,注释,3,、输出:,print,(),等待用户输入:,input,(,“,请输入:,”,),4,、中文编码,在,python2,中需要在文件开头加入:#-*-coding:UTF-8-*-或者#coding=utf-8,解决文件中有中文的问题。,python3,不用书写。,14,2025/4/28 周一,Python3 基本数据类型,counter=100#整型变量,miles =1000.0#浮点型变量,name =runoob#字符串,a,
11、b,c=1,2,runoob,内置的 type()函数可以用来查询变量所指的对象类型。,标准数据类型,Python3 中有六个标准的数据类型:,Number(数字),String(字符串),List(列表),Tuple(元组),Sets(集合),Dictionary(字典),15,2025/4/28 周一,数据类型,列表:,list=1,2,34,”,列表,”,元组:,tuple=(12,23,345,”tuple”),集合:,set=12,2534,456,”set”,或者,set(),字典:,dictionary=“name”:”zidian”,”sex”:”nan”,数据类型转换:,in
12、t(x,base),将,x,转换为一个整数,float(x),将,x,转换到一个浮点数,complex(real,imag),创建一个复数,str(x),将对象,x,转换为字符串,repr(x),将对象,x,转换为表达式字符串,eval(str),用来计算在字符串中的有效,Python,表达式,并返回一个对象,tuple(s),将序列,s,转换为一个元组,list(s),将序列,s,转换为一个列表,set(s),转换为可变集合,dict(d),创建一个字典。,d,必须是一个序列,(key,value),元组。,frozenset(s),转换为不可变集合,chr(x),将一个整数转换为一个字符,
13、ord(x),将一个字符转换为它的整数值,hex(x),将一个整数转换为一个十六进制字符串,oct(x),将一个整数转换为一个八进制字符串,16,2025/4/28 周一,运算,+,加,-,两个对象相加,a+b,输出结果,31,-,减,-,得到负数或是一个数减去另一个数,a-b,输出结果,-11,*,乘,-,两个数相乘或是返回一个被重复若干次的字符串,a*b,输出结果,210,/,除,-x,除以,y,b/a,输出结果,2.1,%,取模,-,返回除法的余数,b%a,输出结果,1,*,幂,-,返回,x,的,y,次幂,a*b,为,10,的,21,次方,/,取整除,-,返回商的整数部分,9/2,输出结
14、果,4,9.0/2.0,输出结果,4.0,17,2025/4/28 周一,Python比较运算符,运算符,描述,实例,=,等于,-,比较对象是否相等,(a=b),返回,False,。,!=,不等于,-,比较两个对象是否不相等,(a!=b),返回,True,。,大于,-,返回,x,是否大于,y,(a b),返回,False,。,小于,-,返回,x,是否小于,y,。所有比较运算符返回,1,表示真,返回,0,表示假。这分别与特殊的变量,True,和,False,等价。注意,这些变量名的大写。,(a=,大于等于,-,返回,x,是否大于等于,y,。,(a=b),返回,False,。,=,小于等于,-,返
15、回,x,是否小于等于,y,。,(a=b),返回,True,。,18,2025/4/28 周一,Python赋值运算符,运算符,描述,实例,=,简单的赋值运算符,c=a+b,将,a+b,的运算结果赋值为,c,+=,加法赋值运算符,c+=a,等效于,c=c+a,-=,减法赋值运算符,c-=a,等效于,c=c-a,*=,乘法赋值运算符,c*=a,等效于,c=c*a,/=,除法赋值运算符,c/=a,等效于,c=c/a,%=,取模赋值运算符,c%=a,等效于,c=c%a,*=,幂赋值运算符,c*=a,等效于,c=c*a,/=,取整除赋值运算符,c/=a,等效于,c=c/a,19,2025/4/28 周一
16、其他运算符,Python位运算符,Python逻辑运算符,Python成员运算符,Python身份运算符,注:Python运算符优先级,20,2025/4/28 周一,Python3 条件控制,Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。,可以通过下图来简单了解,条件语句的执行过程:,21,2025/4/28 周一,if,语句,(,条件控制,),a=3,if a=4,:,print,(,“a,是,4”,),else,:,print,(,a,),a=3,if a=4,:,print,(,“a,是,4”,),elif a=3,:,print(a
17、),else,:,print,(,a,),22,2025/4/28 周一,循环语句,#!/usr/bin/env python3,n=100,sum=0,counter=1,while counter n):,return,yield a,a,b=b,a+b,counter+=1,f=fibonacci(10)#f 是一个迭代器,由生成器返回生成,28,2025/4/28 周一,生成器,跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。,在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的
18、值,并在下一次执行 next()方法时从当前位置继续运行。,调用一个生成器函数,返回的是一个迭代器对象。,29,2025/4/28 周一,函数,你可以定义一个由自己想要功能的函数,以下是简单的规则:,函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。,任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。,函数的第一行语句可以选择性地使用文档字符串用于存放函数说明。,函数内容以冒号起始,并且缩进。,return 表达式 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。,30,2025/4/28 周一,函数调用,#!/usr/bi
19、n/python3,#定义函数,def printme(str):,打印任何传入的字符串,print(str),return,printme(我要调用用户自定义函数!),#调用函数,printme(再次调用同一函数),31,2025/4/28 周一,可更改(mutable)与不可更改(immutable)对象,在 python 中,strings,tuples,和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。,不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于
20、新生成了a。,可变类型:变量赋值 la=1,2,3,4 后再赋值 la2=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。,python 函数的参数传递:,不可变类型:类似 c+的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。,可变类型:类似 c+的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响,32,2025/4/28 周一,必须函数,必需参数须以正确的顺序传入函
21、数。调用时的数量必须和声明时的一样。,#!/usr/bin/python3,#可写函数说明,def printme(str):,打印任何传入的字符串,print(str);,return;,#调用printme函数,printme();,33,2025/4/28 周一,关键字参数,关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。,使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。,#!/usr/bin/python3,#可写函数说明,def printme(str):,打印任何传入的字符串,print(str);,r
22、eturn;,#调用printme函数,printme(str=,python,学习);,34,2025/4/28 周一,默认参数,调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:,#!/usr/bin/python3,def printinfo(name,age=35):,#可写函数说明,打印任何传入的字符串,print(名字:,name);,print(年龄:,age);,return;,printinfo(age=50,name=runoob);,#调用printinfo函数,print(-),printinfo(name=runoob
23、);,35,2025/4/28 周一,不定长参数,你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。,加了星号(*)的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。,def printinfo(arg1,*vartuple):,print(输出:),#,打印任何传入的参数,print(arg1),for var in vartuple:,print(var),return;,printinfo(10);,#调用printinfo 函数,printinfo(70,60
24、50);,36,2025/4/28 周一,匿名函数,python 使用 lambda 来创建匿名函数。,所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。,lambda 只是一个表达式,函数体比 def 简单很多。,lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。,lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。,虽然lambda函数看起来只能写一行,却不等同于C或C+的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。,37,2025/4/28 周一,lambda,sum=
25、lambda arg1,arg2:arg1+arg2;,#调用sum函数,print(相加后的值为:,sum(10,20),print(相加后的值为:,sum(20,20),38,2025/4/28 周一,return语句,return 表达式 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。,def sum(arg1,arg2):,#返回2个参数的和.,total=arg1+arg2,print(函数内:,total),return total;,#调用sum函数,total=sum(10,20);,print(函数外:,total),39,202
26、5/4/28 周一,变量作用域,Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。,变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:,L(Local)局部作用域,E(Enclosing)闭包函数外的函数中,G(Global)全局作用域,B(Built-in)内建作用域,以 L E G B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。,40,2025/4/28 周一,全局变量和局部变量,定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥
27、有全局作用域。,局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。,total=0;#这是一个全局变量,#可写函数说明,def sum(arg1,arg2):,#返回2个参数的和.,total=arg1+arg2;#total在这里是局部变量.,print(函数内是局部变量:,total),return total;,sum(10,20);,#调用sum函数,print(函数外是全局变量:,total),41,2025/4/28 周一,global 和 nonlocal关键字,当内部作用域想修改外部作用域的变量
28、时,就要用到global和nonlocal关键字了。,num=1,def fun1():,global num#需要使用 global 关键字声明,print(num),num=123,print(num),fun1(),print(num),42,2025/4/28 周一,续,如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,,def outer():,num=10,def inner():,nonlocal num#nonlocal关键字声明,num=100,print(num),inner(),print(num),outer
29、),43,2025/4/28 周一,列表,方法,描述,list.append(x),把一个元素添加到列表的结尾,相当于,alen(a):=x,。,list.extend(L),通过添加指定列表的所有元素来扩充列表,相当于,alen(a):=L,。,list.insert(i,x),在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如,a.insert(0,x),会插入到整个列表之前,而,a.insert(len(a),x),相当于,a.append(x),。,list.remove(x),删除列表中值为,x,的第一个元素。如果没有这样的元素,就会返回一个错误。,list
30、pop(i),从列表的指定位置删除元素,并将其返回。如果没有指定索引,,a.pop(),返回最后一个元素。元素随即从列表中被删除。(方法中,i,两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在,Python,库参考手册中遇到这样的标记。),list.clear(),移除列表中的所有项,等于,del a:,。,list.index(x),返回列表中第一个值为,x,的元素的索引。如果没有匹配的元素就会返回一个错误。,list.count(x),返回,x,在列表中出现的次数。,list.sort(),对列表中的元素进行排序。,list.reverse(),倒排列表中的元素。
31、list.copy(),返回列表的浅复制,等于,a:,。,44,2025/4/28 周一,列表推导式,列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。,每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。,vec=2,4,6,3*x for x in vec,列表推导式可以使用复杂表达式或嵌套函数:str(round(355/
32、113,i)for i in range(1,6),45,2025/4/28 周一,del,语句,使用 del 语句可以从一个列表中依索引而不是值来删除一个元素。这与使用 pop()返回一个值不同。可以用 del 语句从列表中删除一个切割,或清空整个列表(我们以前介绍的方法是给该切割赋一个空列表)。,46,2025/4/28 周一,集合,集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。,可以用大括号()创建集合。注意:如果要创建一个空集合,你必须用 set()而不是 ;后者创建一个空的字典,下一节我们会介绍这个数据结构。,47,2025/4/28 周一,字典,序列是以连续的整
33、数为索引,与此不同的是,字典以关键字为索引,关键字可以是任意不可变类型,通常用字符串或数值。,理解字典的最佳方式是把它看做无序的键=值对集合。在同一个字典之内,关键字必须是互不相同。,一对大括号创建一个空的字典:。,构造函数 dict()直接从键值对元组列表中构建字典。如果有固定的模式,列表推导式指定特定的键值对:dict(sape=4139,guido=4127,jack=4098),48,2025/4/28 周一,遍历技巧,在字典中遍历时,关键字和对应的值可以使用 items()方法同时解读出来:,同时遍历两个或更多的序列,可以使用 zip()组合:,questions=name,ques
34、t,favorite color,answers=lancelot,the holy grail,blue,for q,a in zip(questions,answers):,print(What is your 0?It is 1.format(q,a),要反向遍历一个序列,首先指定这个序列,然后调用 reversed()函数:,要按顺序遍历一个序列,使用 sorted()函数返回一个已排序的序列,并不修改原值:,49,2025/4/28 周一,Python3 模块,模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用
35、 python 标准库的方法。,import sys,print(命令行参数如下:),for i in sys.argv:,print(i),print(nnPython 路径为:,sys.path,n),50,2025/4/28 周一,自写模块,文件名为,fibo.py,def fib(n):#定义到 n 的斐波那契数列,a,b=0,1,while b n:,print(b,end=),a,b=b,a+b,print(),def fib2(n):#返回到 n 的斐波那契数列,result=,a,b=0,1,while b 1:10d.format(name,number),59,2025/4
36、/28 周一,旧式字符串格式化,%操作符也可以实现字符串格式化。它将左边的参数作为类似 sprintf()式的格式化字符串,而将右边的代入,然后返回格式化后的字符串。print(常量 PI 的值近似为:%5.3f。%math.pi),因为 str.format()比较新的函数,大多数的 Python 代码仍然使用%操作符。但是因为这种旧式的格式化最终会从该语言中移除,应该更多的使用 str.format().,60,2025/4/28 周一,输入,Python提供了 input()置函数从标准输入读入一行文本,默认的标准输入是键盘。,input 可以接收一个Python表达式作为输入,并将运算
37、结果返回。,61,2025/4/28 周一,读和写文件,open()将会返回一个 file 对象open(filename,mode),filename:filename 变量是一个包含了你要访问的文件名称的字符串值。,mode:mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。,62,2025/4/28 周一,mode,选项,模式,描述,r,以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。,rb,以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。,r+,打开一个文件用于读写
38、文件指针将会放在文件的开头。,rb+,以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。,w,打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。,wb,以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。,w+,打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。,wb+,以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。,a,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。
39、如果该文件不存在,创建新文件进行写入。,ab,以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。,a+,打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。,ab+,以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。,63,2025/4/28 周一,图示,64,2025/4/28 周一,图示,65,2025/4/28 周一,实例,#打开一个
40、文件,f=open(/tmp/foo.txt,w),f.write(Python 是一个非常好的语言。n是的,的确非常好!n),#关闭打开的文件,f.close(),66,2025/4/28 周一,文件对象的方法,f.read(),为了读取一个文件的内容,调用 f.read(size),这将读取一定数目的数据,然后作为字符串或字节对象返回。,size 是一个可选的数字类型的参数。当 size 被忽略了或者为负,那么该文件的所有内容都将被读取并且返回。,f.readline(),f.readline()会从文件中读取单独的一行。换行符为 n。f.readline()如果返回一个空字符串,说明已经
41、已经读取到最后一行。,f.readlines(),f.readlines()将返回该文件中包含的所有行。,如果设置可选参数 sizehint,则读取指定长度的字节,并且将这些字节按行分割。,67,2025/4/28 周一,续,f.write(),f.write(string)将 string 写入到文件中,然后返回写入的字符数。,f.tell(),f.tell()返回文件对象当前所处的位置,它是从文件开头开始算起的字节数。,f.seek(),如果要改变文件当前的位置,可以使用 f.seek(offset,from_what)函数。,from_what 的值,如果是 0 表示开头,如果是 1 表
42、示当前位置,2 表示文件的结尾,例如:,seek(x,0):从起始位置即文件首行首字符开始移动 x 个字符,seek(x,1):表示从当前位置往后移动x个字符,seek(-x,2):表示从文件的结尾往前移动x个字符,from_what 值为默认为0,即文件开头。,68,2025/4/28 周一,续,f.close(),在文本文件中(那些打开文件的模式下没有 b 的),只会相对于文件起始位置进行定位。,当你处理完一个文件后,调用 f.close()来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常。,当处理一个文件对象时,使用 with 关键字是非常好的方式。在结束后,它会帮你正确的
43、关闭文件。而且写起来也比 try-finally 语句块要简短:,with open(/tmp/foo.txt,r)as f:,read_data=f.read(),f.closed,文件对象还有其他方法,如 isatty()和 trucate(),但这些通常比较少用。,69,2025/4/28 周一,pickle 模块,python的pickle模块实现了基本的数据序列和反序列化。,通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。,通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。,pickle.dump(obj,file,
44、protocol),有了 pickle 这个对象,就能对 file 以读取的形式打开:,x=pickle.load(file),注解:从 file 中读取一个字符串,并将它重构为原来的python对象。,file:类文件对象,有read()和readline()接口。,70,2025/4/28 周一,Python3 File(文件)方法,方法及描述,file.close(),关闭文件。关闭后文件不能再进行读写操作。,file.flush(),刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件,而不是被动的等待输出缓冲区写入。,file.fileno(),返回一个整型的文件描述符,(filed
45、escriptorFD,整型,),可以用在如,os,模块的,read,方法等一些底层操作上。,file.isatty(),如果文件连接到一个终端设备返回,True,,否则返回,False,。,file.next(),返回文件下一行。,file.read(size),从文件读取指定的字节数,如果未给定或为负则读取所有。,file.readline(size),读取整行,包括,n,字符。,file.readlines(sizeint),读取所有行并返回列表,若给定,sizeint0,,返回总和大约为,sizeint,字节的行,实际读取值可能比,sizeint,较大,因为需要填充缓冲区。,file.
46、seek(offset,whence),设置文件当前位置,file.tell(),返回文件当前位置。,file.truncate(size),从文件的首行首字符开始截断,截断文件为,size,个字符,无,size,表示从当前位置截断;截断之后,V,后面的所有字符被删除,其中,Widnows,系统下的换行代表,2,个字符大小。,file.write(str),将字符串写入文件,没有返回值。,file.writelines(sequence),向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。,71,2025/4/28 周一,Python3 OS 文件/目录方法,os 模块提供了
47、非常丰富的方法用来处理文件和目录,周一,Python3 错误和异常,语法错误 Python 的语法错误或者称之为解析,语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。,异常 Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。,大多数的异常都不会被程序处理,都以错误信息的形式展现。,73,2025/4/28 周一,异常处理,让用户输入一个合法的整数,但是允许用户中断这个程序(使用 Control-C 或者操作系统提供的方法)。用户中断的信息会引发一个 KeyboardInterrupt 异常。,while True:,tr
48、y:,x=int(input(Please enter a number:),break,except ValueError:,print(Oops!That was no valid number.Try again ),74,2025/4/28 周一,try,语句,try语句按照如下方式工作;,首先,执行try子句(在关键字try和关键字except之间的语句),如果没有异常发生,忽略except子句,try子句执行后结束。,如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行
49、 try 语句之后的代码。,如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。,一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。,处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。,一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,,75,2025/4/28 周一,例,try,:,.,except(RuntimeError,TypeError,NameError):,pass,76,2025/4/28 周一,try except else
50、for arg in sys.argv1:,try:,f=open(arg,r),except IOError:,print(cannot open,arg),else:,print(arg,has,len(f.readlines(),lines),f.close(),else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行。,77,2025/4/28 周一,抛出异常,Python 使用 raise 语句抛出一个指定的异常。,raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Excep
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818