小甲鱼Python笔记(下)

二十八 二十九  文件

打开文件 open(文件名[,模式][,缓冲])  注意open是个函数不是方法

模式:

缓冲:

大于1的数字代表缓冲区的大小(单位是字节),-1(或者是任何负数)代表使用默认缓冲区大小

只有用flush或者close时才会更新硬盘的数据

三种标准的流:

输入:sys.stdin 输出:sys.stdout  错误:sys.stderr

用list()让文件成为一个列表,每一行是一个元素

用f.seek(0,0)还原文件指针到起始位置

用for读取文件中的每一行

三十  os模块和os.path模块

Python os模块包含普遍的操作系统功能,注意括号中需要使用字符串

1.getcwd()

返回当前工作目录

2.chdir(path)

改变工作目录

3.listdir(path=‘.‘)

列举指定目录中的文件名(‘.‘表示当前目录,‘..‘表示上一级目录)

4.mkdir(path)

创建单层目录,如该目录已存在抛出异常

5.makedirs(path)

递归创建多层目录,如该目录已存在抛出异常,注意:‘E:\\a\\b‘和‘E:\\a\\c‘并不会冲突

6.remove(path)

删除文件

7.rmdir(path)

删除单层目录,如该目录非空则抛出异常

8.removedirs(path)

递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常

9.rename(old, new)

将文件old重命名为new

10.system(command)

运行系统的shell命令

以下函数没有参数

11.os.curdir

指代当前目录(‘.‘)

12.os.pardir

指代上一级目录(‘..‘)

13.os.sep

输出操作系统特定的路径分隔符(Win下为‘\\‘,Linux下为‘/‘)

14.os.linesep

当前平台使用的行终止符(Win下为‘\r\n‘,Linux下为‘\n‘)

15.os.name

指代当前使用的操作系统(包括:‘posix‘, ‘nt‘, ‘mac‘, ‘os2‘, ‘ce‘, ‘java‘)

os.path模块

1.basename(path)

去掉目录路径,单独返回文件名

2.dirname(path)

去掉文件名,单独返回目录路径

3.join(path1[, path2[, ...]])

将path1, path2各部分组合成一个路径名

4,split(path)

分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在

5.splitext(path)

分离文件名与扩展名,返回(f_name, f_extension)元组

6.getsize(file)

返回指定文件的尺寸,单位是字节

7.getatime(file)

返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)

8.getctime(file)

返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)

9.getmtime(file)

返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)

以下为函数返回 True 或 False

10.exists(path)

判断指定路径(目录或文件)是否存在

11.isabs(path)

判断指定路径是否为绝对路径

12.isdir(path)

判断指定路径是否存在且是一个目录

13.isfile(path)

判断指定路径是否存在且是一个文件

14.islink(path)

判断指定路径是否存在且是一个符号链接

15.ismount(path)

判断指定路径是否存在且是一个挂载点

16.samefile(path1, paht2)

判断path1和path2两个路径是否指向同一个文件

三十一  pickle模块

以二进制保存数据

三步走:打开文件,用pickle.dump()方法将数据放入文件,关闭文件

1 import pickle
2 my_list = [1,2,‘老王‘,[‘abc‘]]
3 pickle_file = open(‘my_list.pkl‘,‘wb‘) #文件名后缀无所谓
4 pickle.dump(my_list,pickle_file)
5 pickle_file.close()

这样文件夹中就保存了my_list.pkl文件,(查询当前目录是用 import os   os.getcwd())

读取数据

打开文件,调用pickle.load()方法

pickle_file = open(‘my_list.pkl‘,‘rb‘)
list2 = pickle.load(pickle_file)
print(list2)

三十二 三十三  异常

常见异常类型:

AttributeError:属性错误,特性引用和赋值失败时会引发属性错误
NameError:试图访问的变量名不存在
SyntaxError:语法错误,代码形式错误
Exception:所有异常的基类,因为所有python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exceptions模块中定义。
IOError:一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误
KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误
IndexError:索引错误,使用的索引不存在,常索引超出序列范围,什么是索引
TypeError:类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误
ZeroDivisonError:除数为0,在用除法操作时,第二个参数为0时引发了该错误
ValueError:值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数。

捕获异常

try语句一旦被检测出异常,剩下的语句将不会被执行

几种搭配:

1.try except

1 try:
2     sum = 1/0
3 except ZeroDivisionError:
4     print(‘出错‘)

可以指明出错原因:

1 try:
2     sum = 1/0
3 except ZeroDivisionError as reason:
4     print(‘出错,错误原因:‘,str(reason))

可以用多个except语句:

1 try:
2     f = open("nofile.txt")
3     sum = 1/0
4 except IOError as reason:
5     print(‘出错,错误原因:‘,str(reason))
6 except ZeroDivisionError as reason:
7     print(‘出错,错误原因:‘,str(reason))

可以用一个元组捕获多个异常:

1 try:
2     sum = 1/0
3     f = open("nofile.txt")
4 except (IOError,ZeroDivisionError) as reason:
5     print(‘出错,错误原因:‘,str(reason))

用while True 和 else 组合,else后的语句在没有异常的情况下才执行,注意缩进,输入错误后会重新输入直到正确:

 1 while True:
 2     try:
 3         x = int(input("input first num"))
 4         y = int(input("input first num"))
 5         z = x/y
 6         print(z)
 7     except ZeroDivisionError:
 8         print("error,try again")
 9     else:
10         break

不管try语句中是否发生异常,finally语句后都会执行:

1 try:
2     x = int(input("input first num"))
3     y = int(input("input first num"))
4     z = x/y
5     print(z)
6 except ZeroDivisionError:
7     print("error:")
8 finally:
9     print("结束")

三十四  else和with

else:

if-else语句:

和各种语言相同的用法,在条件语句中,与if语句搭配使用的else语句。如果if语句的条件表达式的结果布尔值为假,那么程序将执行else语句后的代码。

elif(else-if)语句:

elif是python提供的else-if语句,它检查多个条件表达式的值是否为真,并在为真时执行特定代码块中的代码。和else一样,elif是可选的,但是要注意的是,一个if语句可以跟多个elif语句,但最后只能有一个else语句

while-else/for-else语句:

在其他语言中,除了条件语句,是不会见到else分支的,但在Python中,while和for循环中,也是可以使用else语句的。它们的工作顺序为:在循环中使用时,else语句只在循环完成后执行,也就是说,break语句也会跳过else代码块,只要循环是正常结束,而不是通过break,else语句就会执行

求素数:

 1 def fun(num):
 2     count = int(num/2)
 3     while count>1:
 4         if(num%count == 0):
 5             print("%d的最大公约数是:%d" %(num,count))
 6             break
 7         count -= 1
 8     else:
 9         print("%d是素数" %num)
10
11 n = int(input("请输入一个整数:"))
12 fun(n)

执行结果:

注意:Python中没有自增自减运算符,格式化输出多个字符要用元组的形式

try-else语句:

对于python中的错误和异常,try-except语句段,也可以和else连用,其功能和循环中的else语句没有多大区别:在try范围内没有检测到异常的时候,执行else子句。

with:

这个语法是用来代替传统的try...finally语法的。

with EXPRESSION [ as VARIABLE] WITH-BLOCK

1 try:
2     with open("e://1.txt",‘r‘) as f:
3         for each_line in f:
4             print(each_line)
5 except IOError as reason:
6     print("Error:",str(reason))

如果用finally,若是文件不存在,也要走f.close(),这样的话文件存在打开后会自动关闭

类和对象

类的构造方法 def __init__():

1 class People:
2     def __init__(self,name):
3         self.name = name

注意:在构造方法中的变量不用再次声明,必须有self,创建类的对象是用=

类的私有成员

让方法或者类变为私有,只要在它的名字前加上双下划线

1 class People:
2     __name = ‘laowang‘
3     def getname(self):
4         return self.__name

注意:类的私有成员可以通过方法访问,也可以通过   _类名__私有成员这种格式来访问

类的继承

class 子类(父类、基类、超类)

在继承构造函数的过程中,可以用以下两个方法,推荐方法2:

(1)调用未绑定的父类构造方法

1 class People:
2     def __init__(self):
3         self.name = ‘aa‘
4 class Student(People):
5     def __init__(self):
6         People.__init__(self)
7         self.son = 20

(2)使用super

class People:
    def __init__(self):
        self.name = ‘aa‘
class Student(People):
    def __init__(self):
        super().__init__()
        self.son = 20

super可以不带任何参数,但是当父类中有参数传入,super后的__init__要加上参数而且不能加上self

1 class People:
2     def __init__(self,name):
3         self.name = name
4 class Student(People):
5     def __init__(self,name,sno):
6         super().__init__(name)
7         self.name = name
8         self.sno = sno

类的组合

类之间没用明显继承关系可以用组合,比如一个电话簿的类由电话和地址类组合起来:

 1 class Tel:
 2     def __init__(self,x):
 3         self.info = x
 4
 5 class Add:
 6     def __init__(self,y):
 7         self.info = y
 8
 9 class Notebook:
10     def __init__(self,x,y):
11         self.tel = Tel(x)
12         self.add = Add(y)
13     def print_info(self):
14         print("Tel:%s\nAdd:%s" %(self.tel.info,self.add.info))

类 类对象 实例对象

类对象就像C++中的static变量,一个对象有了实例对象后就将类对象的值覆盖了

属性名如果和方法名相同,属性会覆盖方法

绑定

对象.__dict__返回对象拥有的属性

对象调用后方法绑定到实例对象上del类后,a的方法还是存在的,因为A的方法和属性都是static,程序退出前不会消失

一些和类相关的BIF

issubclass(class, classinfo)
isinstance(object, classinfo)
hasattr(object, name)  注意第二个参数要用字符串格式
getattr(object, name[, default])
setattr(object, name, value)
delattr(object, name)

魔法方法

魔法方法总是被双下划线包围,它们总能在适当的时候自动被调用

__init__(self)  不能有返回值

__new__(cls[,])  返回一个类对象,python自动调用,一般不需要重写

__del__(self)   del一个对象的时候被调用

模块

(1)import 文件名  比如想导入tmp.py,在主程序中写import tmp,并用tmp.调用函数

(2)import 文件名 form 函数名(若要引用全部,写*)  在主程序中直接调用函数名

(3)import 文件名 as 别名  在主程序中用 别名. 调用函数

if __name__ == "__main__":

简单来说当一个文件作为模块时,在if __name__ == "__main__":语句后的内容不能被调用

原理:

当作为模块时,可见__name__并不等于__main__,所以之后的东西不会执行,也不能被调用

搜索路径:用列表的方式添加或删除

包:创建一个文件夹,文件夹中存放相应模块,文件夹的名字就是包的名字,在文件夹中创建一个__init__.py的模块文件,内容可以为空

使用包,import 包名.模块名

标准库

学习一个模块的方法,以timeit模块为例:

1.IDLE中F1,索引

2. IDLE中print(timeit.__doc__)查询模块说明

3. dir(timeit)查询所有用法

4. timeit.__all__查询对外接口

5. timeit.__file__查询源码路径

介绍timeit模块

爬虫

urllib

时间: 2024-10-17 20:51:02

小甲鱼Python笔记(下)的相关文章

小甲鱼Python笔记

Python的第三方简单图形界面的GUI类库(easygui)下载及安装 下载:Easygui官网http://easygui.sourceforge.net下载easygui压缩包 安装:将解压后的easygui.py复制到Python安装目录下的Lib\site-packages文件夹下 测试:调出Python的IDLE,输入 >>>import easygui >>>easygui.msgbox("This is test!") 若出现一个对话

小甲鱼Python笔记(类)

类和对象 类的构造方法 def __init__(): 1 class People: 2 def __init__(self,name): 3 self.name = name 注意:在构造方法中的变量不用再次声明,必须有self,创建类的对象是用= 类的私有成员 让方法或者类变为私有,只要在它的名字前加上双下划线 1 class People: 2 __name = 'laowang' 3 def getname(self): 4 return self.__name 注意:类的私有成员可以

小甲鱼python基础教程飞机大战源码及素材

百度了半天小甲鱼python飞机大战的源码和素材,搜出一堆不知道是什么玩意儿的玩意儿. 最终还是自己对着视频一行行代码敲出来. 需要的同学点下面的链接自取. 下载 原文地址:https://www.cnblogs.com/144823836yj/p/10162920.html

小甲鱼python视频第四讲(笔记及课后习题答案)

今天主要学习的是关于第二讲中那个猜数字游戏的改进,在课程中主要学到了以下知识点: 1:python的比较操作符 2:if和else语句的使用 3:while循环 4:and的使用 5:简单的模块引用(本课程为random的引用) 1,关于python的比较操作符,有如下几种: 1 python比较操作符 2 3 > 左边大于右边 4 >= 左边大于等于右边 5 < 左边小于右边 6 <= 左边小于等于右边 7 = 左边等于右边 8 != 左边不等于右边 注意:所使用的符号均为英文输

小甲鱼python视频第五讲(笔记及课后习题答案)

前两天偷懒,没有坚持,今天开始,希望能坚持下去, 今天主要学习的是数据类型,关于python,数据类型主要有整型(int).布尔类型(bool).浮点型(float).E记法(E) 举例说明,整型(int)主要为整数,布尔类型(bool)为判断,true或者false.浮点型(float)包含小数点,E记法为科学计数法. 关于例子,有几点要说明下: 1,type和isinstance.这是两个内置函数,这两个主要的作用都是判断变量的类型(整型.浮点型等),区别是type主要是给出变量的类型,is

小甲鱼python视频第六讲(笔记及课后习题答案)

今天主要学习了常用操作符,如算术操作符.比较操作符.逻辑操作符等,鉴于课件做的太好(赞美小甲鱼~~~).我直接把图贴上来(其实是自己懒) 名词解释 拼接 这是第一节学的一个名词,由于自己偷懒,没有写,这里补充上.拼接,其实就是把两个字符串连接在一起,不是其他,注意下面例子的不同 最后着重强调下版本的问题,附带今天的程序(要在版本三中运行) temp = str(input('请输入一个年份:')) while not temp.isdigit(): temp = input("抱歉,您的输入有误

小甲鱼Python3笔记

000-愉快的开始 入门容易,学习难,代码量少. 跨平台: Windows, Mac OS, Linux, UNIX. 应用领域: 操作系统 WEB 3D动画 企业应用 云计算等等. 001-我和Python的第一次亲密接触 1.安装2. IDLE 是一个Python Shell:一个通过键入文本与程序交互的途径.3.print('text'), print(5+3), print(123+456), print('test' +'text' ), print('test' * 8), prin

小甲鱼python疑难点

1.python生成器 2.while 1: num = input('请输入一个整数(输入Q结束程序):') if num != 'Q': num = int(num) print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num)) print('十进制 -> 八进制 : %d -> 0o%o' % (num, num)) print('十进制 -> 二进制 : %d -> ' % num, bin(num)) else: break 十

[Python]小甲鱼Python视频第2课(第一个游戏)课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Mon Mar 4 11:19:54 2019 @author: Administrator """ """ 测试题: 0. 什么是BIF? 内置函数,已经写好的API,直接按规矩调用即可,不需要自己写的. 1. 用课堂上小甲鱼教的方法数一数 Python3 提供了多少个 BIF? 在Python命令行下,输入 bif_list_temp