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()

 

 



 

 

posted @ 2021-11-29 19:08  柏晓宁  阅读(104)  评论(0)    收藏  举报