python3学习笔记 (13) 常用库操作 sys实战 hashlib实战 文件操作
文件操作
一般情况下,我们对文件操作完成以后,需要及时的关闭,但是使用with上下文的方法,程序会在内部自动关闭,我们只需要专注于文件的操作就行
文件操作一般有三种方法 w(读) r(写) a(把文件原来的内容追加一遍)
单行写入:用write
with open("log.txt","w") as a :
a.write("hello world")
输出结果:
log.txt
hello world
多行写入:使用wirtelines
with open("log.txt","w") as d: d.writelines(''' jahcjlahl anlal aklna akln ''')
文件的读取,文件的读取,要打印出来
# with open("log.txt","r") as r: # 读取文件的所有内容 只能读取一遍 假如第二次读取或为空 # print(r.read()) # 读取文件的第一行内容 readline() # print(r.readline()) # 按行读取文件readlines() # print(r.readlines())
文件内容的追加 用a
with open("log.txt","w") as a : a.write("hello world")
sys实战
sys的使用往往时伴随着路径。进行sys操作前应该先导入sys 和os库
在工作中写代码的时候,当我们导入方式正确,但是却提示找不到模块时。我们就可以使用sys来解决
解决思路为:
1.找到sys的路径,找到提示模块的路径
2.将模块的路径拼接到一起
3.添加到sys.path里面
4.将模块的所有内容导入进来
5.调用函数
import sys
import os
# 获取当前路径的上一级 base_dir=os.path .dirname(os.path.dirname(__file__)) print(base_dir) # 将day12的路径和sys的路径拼接 day12Path=os.path.join(base_dir,"day12") print(day12Path) # 添加到sys.path里面 sys.path.append(day12Path)
将模块的所有内容全部导入
from login import * func()
输出结果:
D:\code\practice
D:\code\practice\day13
hello world
hashilib实战
主要应用于open api的加密 一般使用时间戳使得到的结果每次都不一样
操作前导入
hashilib库
parse库中的urllib
time库
open api的加密思路:
1、对请求参数进行排序,根据key来进行排序
2、把请求参数处理成key=value&key=value
3、对请求参数进行md5的加密(加密的数据类型必须是bytes的数据类型)
4. 把加密后的sign当作请求头给服务端发送过去,
服务层进行比较,如果一致,可以请求,如果不一致拒绝请求
import hashlib from urllib import parse import time def sign(): # 对请求参数进行排序根据key来进行排序 dict1={"name:":"wuya","age":28,"address":"xian","time":time.time()} data=dict(sorted(dict1.items(),key=lambda item:item[0])) data=parse.urlencode(data) m=hashlib.md5() m.update(data.encode("utf-8")) return m.hexdigest() print(sign())
输出结果:
2f414f60abd347f48e7dd083a64b6e2c 每次都不一样
异常处理:
程序在执行的过程中,都会存在异常的情况,和设计测试用例的思想一样,需要考虑被测功能点的正常功能点和异常功能点

异常处理执行过程:
try:
expect:
else:
finally
执行顺序:
1、如果try执行正常,代码就执行到else的逻辑,再执行finally
2、如果try执行异常,代码就执行到expect的逻辑,再执行finally
3.一般使用Exception,它能够捕获几乎所有的程序错误信息
4.finally总是能被执行到
一般在写程序的时候 都需要考虑到异常处理
实战一:
def func(a,b): try: print(a/b) except Exception as e: print(e.args) else: print("try执行正确我才能被执行到") finally: print("不管是否执行try") func(4,2) func(1,0)
输出结果:
2.0 try执行正确我才能被执行到 不管是否执行try ('division by zero',) 不管是否执行try
实战二:
import json def out(): username = input("输入账号:\n") password = input("输入密码:\n") return username,password def register(): '''注册''' username,password=out() temp=username+"|"+password with open("user.txt","w") as f: f.write(temp) print("注册成功") def login(): '''登录''' username,password=out() with open("user.txt","r") as f: list1=str(f.read()).split("|") if username==list1[0] and password==list1[1]: print("登录成功") else: print("账号密码错误") if __name__ == '__main__': while True: try: a=int(input("1.注册 2.登录 3.退出\n")) except: print("请输入正确内容") continue #继续执行 else: if a == 1: register() elif a == 2: login() elif a == 3: break
面向对象:
实例化的过程可以看作给类的形式参数赋值
面向对象:
1、类的定义使用的关键字是class
2、类的首字母必须是大写
3、目前学习的类都是新式类
4、所有类的基类(祖先)都是object,因此都是需要来继承的
5、面向对象的三大特性:
封装
继承
多态
6,在OOP的编程中,如果要调用里面的方法,首先需要对类进行实例化,实例化后的对象可以调用类中的方法
class Person(object): def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def show(self): print("my name is {0},my age is {1},my sex is {2}".format(self.name,self.age,self.sex)) # def show(self): # print("hello class") # 对类进行实例化的一个过程,它的对象是obj obj=Person(name="wuya",age=28,sex="nan") obj.show()


浙公网安备 33010602011771号