1、文件读写
文本模式
通过内置函数open,进行文件读写
mode参数:
- r:只读
- w:只写
- a:追加
如下所示:
#文件路径,w只写模式,字符编码
f = open('temp.txt','w',encoding='utf-8')
#write方法,写入字节串
f.write('残破的石窟,千年的羞辱,遮蔽了日出')
#操作完毕,使用close方法关闭文件对象
f.close()
如下所示:
f=open('temp.txt','r',encoding='utf-8')
# 读取3个字符
content=f.read(3)
f.close()
# 打印出来
print(content)
二进制模式
读写文件底层操作读写的都是字节
如下所示:
# mode参数指定为rb 就是用二进制读的方式打开文件
f=open('temp.txt','rb')
content=f.read()
f.close()
# 打印出来字节
print(content)
with语句
with语句是Python引入的一种与异常处理相关的功能,它可以看做是对try…finally语句的简化;
使用with语句打开文件,就不需要调用close()方法关闭文件,解释器会自动调用;
对文件的操作都放在with下面的缩进的代码块中
如下所示:
# open返回的对象 赋值为 变量 f
with open('temp.txt') as f:
linelist = f.readlines()
for line in linelist:
print(line)
写入缓冲
执行该程序时,执行完写入文件内容后,会等待30秒,再关闭文件对象;
运行write方法写入字节到文件中的时候,其实只是把这个请求提交给 操作系统;
操作系统为了提高效率,通常并不会立即把内容写到存储文件中,而是写入内存的一个缓冲区;
等缓冲区的内容堆满之后,或者程序调用close关闭文件对象的时候,再写入到文件中
如下所示:
f = open('temp.txt','w',encoding='utf-8')
f.write('残破的石窟,千年的羞辱,遮蔽了日出')
# 等待 30秒,再close文件
import time
time.sleep(30)
f.close()
如果希望在调用write之后,立即把内容写到文件里面,可以使用文件对象的flush方法
如下所示:
f = open('temp.txt','w',encoding='utf8')
f.write('残破的石窟,千年的羞辱,遮蔽了日出')
# 立即把内容写到文件里面
f.flush()
# 等待 30秒,再close文件
import time
time.sleep(30)
f.close()
2、自定义类
类是一个函数包。类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量
如下所示:
整数对象 的类型是 int
字符串对象 的类型是 str
列表对象 的类型是 list
元组对象 的类型是 tuple
字典对象 的类型是 dict
定义一个类用关键字class后面加类的名称;
类名的规范和变量命名规范一样。通常我们会把类名首字母大写
如下所示:
# 定义一个类,类里面有方法(方法就是函数)
class Cal():
# 定义函数 加减乘除
def __init__(self,first,second):
# 提前声明变量
self.first=first
self.second=second
def add(self):
result = self.first + self.second
return result
# print(result)
def minus(self):
result = self.first - self.second
return result
def multi(self):
result = self.first * self.second
return result
def div(self):
result = self.first / self.second
return result
我们需要调用这个类,就需要实例化一个对象,调用这个类;
类就相当于一个集合,变量是共有的
如下所示:
from test0606.getRequest import Cal
ca = Cal(3,5) # 实例化一个对象,就相当于派了一个代表,可以调用类的权利。
result = ca.minus() # 调用函数
print(result)
初始化方法__init__
解释器在执行实例化类对象的代码时;
首先,解释器会在内存中创建一个该类的实例对象;
然后,解释器会查看这个类是否有 __init__方法,如果有,就会去调用它;
__init__是创建好实例后立即就要执行的方法,所以称之为初始化方法;
通常我们会在__init__方法里面 执行一些初始化的动作,主要就是创建该实例的实例属性
init 方法的第一个参数self
解释器执行实例化代码,会先在内存中创建该类实例对象,然后调用类的__init__方法;
调用 __init__方法时,就将实例对象传递给self参数
定义返回值return
如果函数内部没有写return,那么就没有返回值,打印出来的只是空值none
为什么有的时候,返回的是none,就需要去查看一下函数有没有返回值
调试函数main
只是用来调试的,在函数被调用的时候,不会运行
如下所示:
if __name__ == '__main__':
ca = Cal(3,6)
result = ca.add()
print(result)
3、异常except
解释器执行代码过程中,如果发生异常,就会导致解释器没法继续按照正常流程往下执行代码,所以解释器会结束当前代码的执行;
如果预料到了某些代码运行时可能出现某些异常,就可以使用 try…except… 这样的方法来捕获和处理异常
使用多个except代码段,分别捕获多种类型的异常
如下所示:
try:
choice = input('输入你的选择:')
if choice == '1':
100/0
elif choice == '2':
[][2]
except ZeroDivisionError:
print ('出现 ZeroDivisionError')
except IndexError :
print ('出现 IndexError')
获取异常对象
运行代码的时候,当try中的语句产生异常对象时,就会把产生的异常对象赋值给as后的变量
如下所示:
try:
100/0
except ZeroDivisionError as e:
print (f'异常对象信息:{e}')
匹配所有异常
如下所示:
所有的异常都是Exception的子类。 所以Exception能匹配所有类型的异常
try:
100/0
except Exception as e:
print('未知异常:', e)
except 后面没有写异常的类型,也表示匹配所有的异常
如下所示:
try:
100/0
except:
print('未知异常:')
如果我们想知道异常的详细信息,可以使用traceback模块
如下所示:
import traceback
try:
100/0
except :
print(traceback.format_exc())
4、pycharm调试打断点
报错遇到问题,打断点,然后用debug模式调试;
有两种类型的bug: 语句错误和逻辑错误;
打断点:设置某些代码行位置,当程序运行到这些位置,就会暂停执行;
Pycharm要设置断点非常简单,在要设置断点的代码左边边框上,点击一下鼠标就可以;
设置好了后,就会出现上图所示的一个红点。
接下来,代码编辑界面,右键点击鼠标,选择debug 调试运行程序
如下所示:
print出关键变量的值
直接用代码打印出关键变量的值
5、requests介绍
requests是用来发起请求的,它可以发起get请求,也可以发起post请求
这个模块是没有的,需要手动安装
安装requests模块
如下所示:
发起请求get
import requests
#调登录接口
def login():
url = 'http://127.0.0.1:8888/login'
res = requests.get(url)
print(res.text)
login()
发起请求post
import requests
def login():
url="http://127.0.0.1:8988/login"
data={
"username":"admin",
"password":"123456"
}
res=requests.post(url=url,data=data)
print(res.json())
login()
requests里面的属性
text:打印响应的文本
JSON:响应体不是JSON,就不能用JSON,只针对响应体是JSON才可以调用
url:打印url
cookies:直接可以取出来的。
encodeing:编码格式
content:上下文,通过十六进制打印的b开头,对content进行解码打印出中文
headers:响应头
statue_code:状态码