• python学习 day14 (3月19日)----


    04 json

    # 1. 用于多种语言 交互 编程语言通用数据
    # 内置的 不需要安装直接导入使用
    import json # 导入
    # # dumps loads  dump load
    # dic = {'1':'222'}
    # print(json.dumps(dic))
    # a = json.dumps(dic)
    # print(type(a))
    #
    # d = json.loads(a)
    # print(d,type(d))
    
    # di = '{"1":4}'  #把字典转过来
    # d = json.loads(di)
    # print(d)
    # json.dump({'1':4},open('a','w',encoding='utf-8'))
    #
    # d = json.load(open('a','r',encoding='utf-8'))
    # d['1'] = 10
    #
    # print(d)
    # json.dump({'1':4},open('a','w',encoding='utf-8'))
    d = json.load(open('a','r',encoding='utf-8'))
    print(d)  # 字符串 转换成字典
    # 总结  :
    ''''''          #写入文件  load 和 dump()有持久化的功能
    json.load()     #参数文件句柄(r),将文件中字符串转换成字典
    json.dump()     #对象(字典)文件句柄(w),将 中字典转换成字符串写入文件
    json.dumps()    # 对象(字典) #将字典转换成字符串
    json.load()     #字符串(字典),将字符串转换成字典
    ''''''
    View Code

    05pickle

    #__author : 'liuyang' 
    #date : 2019/3/19 0019 上午 10:15
    # 从文件里读取 信息方便  并且可以操作 信息修改
    # pickle 只支持python  传输速度快  字节传输
    # dumps loads dump load
    # dump load  持久化
    import pickle
    print(pickle.dumps({'1':4}))#二进制 b'x80x03}qx00Xx01x00x00x001qx01Kx04s.'
    
    print(pickle.loads(b'x80x03}qx00Xx01x00x00x001qx01Kx04s.'))
    #将 一堆 类似于 二进制 的东西转化成字典
    pickle.dump({'2':4},open('b','wb')) #字节
    print(pickle.load(open('b','rb')))
    
    #
    '''
        json,pickle 对比
        # loads json 里的将字符串转化成字典  pickle    字节-》字典
        dumps        字典-》字符串                     字典-》字节
        load       文件中的字符  ---》 字典          文件中的字节-》字典
        dump       字典-》字符串写入文件          字典-》字节写入文件
    '''
    
    import json
    
    #ATM机
    d = {'user':'xxx','time':'2018-10-15','money':10000}
    a = json.load(open('a','r',encoding='utf-8'))
    print(d)
    d['money'] += 500
    d['money'] -= 100
    json.dump(d,open('a','w',encoding='utf-8'))
    print(d)
    View Code

    06shevle 文件+字典操作

    import shelve
    # f  =  shelve.open('c',writeback=True)
    f  =  shelve.open('c')
    
    f['name'] = 'alex'
    print(f['name'])
    f['age'] = 18
    print(f['name'],f['age'])
    
    f['name'] = ['alex','wusir']
    print(f['name'])
    print(f,type(f))  #查看不了字典 地址 和 <class 'shelve.DbfilenameShelf'>
    for i in f:
        print(i)  #获得所有的键
        print(f[i])
    print(f.keys())
    #等于下面
    for i in f.values():
        print(i)
    
    f['name'] = {'2':4}  #only  字符串
    print(f['name'])
    for i in f:
        print(i,end=',')
    #注意  : 以后会出现一个问题,咱们对字典的操作 内容,有时写不进去
    #            在 open 写的时候  写个会写 writeback = True
    print(f['name'])
    f['name'] = 'wusir'
    f['name'] = [1,2,3,4]
    print(f['name'])  #{'2': 4}  没有写进 wusir
    
    
    print(list(f.items()))
    print(list(f.keys()))
    print(list(f.values()))
    View Code

    总结上面三个

    # json 最常用 ,前后端分离的时候数据交互  前后端分离 必会
    #pickle   python 不怎么常用                      必了解
    # shelve 建议使用它,它简单 不用来回写             必了解
    View Code
    07random
    # 随机数可以做 验证码 微信红包
    #__author : 'liuyang' 
    #date : 2019/3/19 0019 上午 11:21
    import random   #内置的
    print(random.random())  # 0~1 之间的随机小数
    print(random.randint(1,10))         #起始位置,终止位置,两边包含
    print(random.randrange(1,21,2))     #起始位置,终止位置(不包含),步长
    print(random.choice([1,2,3,4,5]),random.choice(['ev_j','taibai','alex']))
    #从有序数据结构中随机选择一个
    print(random.choices(['ev_j','taibai','alex'],k=2))
    #随机选择两个,但是有重复
    print(random.sample(['ev_j','taibai','alex'],2))#随机选择两个,没有重复的了
    
    li = [1,2,3,4,5,6]
    random.shuffle(li) #洗牌 打乱顺序
    print(li)
    
    # 随机数可以做 验证码 微信红包
    print(chr(65),chr(90),chr(97),chr(122))
    #a-z  A-Z
    U = chr(random.randrange(65,91))
    L = chr(random.randrange(97,123))
    # for i in range(6):
    #     # N = random.randrange(0,10)
    #     print(U,L,random.randrange(0,10),random.randrange(0,10))
    N1 = random.randrange(0,10)
    N2 = random.randrange(0,10)
    print(U,L,N1,N2)  
    View Code

    08 os 

    #1.os 模块和当前电脑操作系统做交互
    #os 内置模块
    #文件夹
    import os
    # os.makedirs('app/a/b/c')#递归建文件***以下都是
    # os.removedirs('app/a/b/c')#递归删除,当这个要删除的目录有文件就停止
    # os.mkdir('ap')  #创建单个文件
    # os.rmdir('ap')  #删除单个文件  目录不是空的。:报错
    print(os.listdir('D:PythonS20'))#查看某个目录下的内容
    #['.idea', 'day01', 'day02', 'day04', 'day05', 'day06', 'day07', 'day07(第一次大作业)gouwuche',....
    # #文件:
    # os.remove()# 删除这个文件,删除了就不能恢复了*****
    # os.rename() #修改文件的名字*****
    
    #操作系统
    print(repr(os.sep)) #'\' 路径符号
    print(repr(os.linesep))#'
    ' 换行符
    
    print(os.pathsep)
    #环境变量的分割
    print(repr(os.name)) # 'nt' windows
    
    #哥三 超级有用
    print(os.system('dir'))  #没转码
    print(os.popen('dir').read())  #代码执行 cmd 的功能***
    #在写程序的时候可以发一些操作系统的指令
    # 2019/03/19 周二  上午 10:16             1,113 04json.py
    # 2019/03/19 周二  上午 10:36             1,145 05pickle.py
    # 2019/03/19 周二  上午 11:20             1,234 06 shelve.py
    # 2019/03/19 周二  上午 11:46             1,053 07 random.py
    # 2019/03/19 周二  下午 12:01               943 08 os.py
    # 在linux 系统上相当于发 shell命令
    print(os.environ)   # 环境变量*
    
    # 路径 os.path
    print(os.path.abspath('a')) #获取当前文件的绝对路径****
    print(os.path.split(r'D:PythonS20day14morna'))
    #将这个文件的绝对路径分成目录和文件
    print(os.path.basename(r'D:PythonS20day14morna'))#**
    # 获取的是这个文件的名字
    print(os.path.dirname(r'D:PythonS20day14morna'))#***
    #获取的是文件的目录
    
    print(os.path.exists('c')) #相对路径    **
    #判断这个文件是否存在
    print(os.path.isabs('D:PythonS20day14morn'))
    #判断是否是绝对路径
    
    # os.path.join()#路径拼接的 软件开发规规范 框架
    print(os.path.join('c:\','app','a'))#*****
    
    print(os.path.getsize('b')) #和下面一样***
    print(os.stat('b').st_size)  #获取文件大小,坑目录F
    # print(os.getcwd())  #获取工作路径
    print(os.chdir('D:PythonS20day14morn'))#路径切换
    print(os.getcwd())
    View Code
    #os.makedirs    os.removedirs   os.mkdir('ap')      os.rmdir('ap')      os.listdir
    #os.remove() os.rename() os.popen('dir').read() os.path.abspath('a')
    #os.path.basename os.path.basename os.path.dirname os.path.exists
    #os.path.isabs os.path.join os.path.getsize
    https://mm.edrawsoft.cn/map.html?obj=wxoa3v5wPYw7J5YTCXUoH1ZaSi0JAw/Personal/os.emmx

    9.sys
    #1. sys 模块 python 解释器交互的
    # sys 内置的   代码服务器 linux 运行
    # 写的代码叫后端 后端写好的代码 linux系统上-后端开发 -数据库(文件)ip+端口(ip里的空间)
    # qq qq 之间的通信靠端口
    import sys
    print(sys.argv[-1])     #远程访问D:/Python/S20/day14/after/09sys.py 191.168.1.1 8080
    #接受cmd 方式调用 后面的参数会传递过来          ***
    # sys.path        ******
    # 自定义模块 添加到这个模块中
    print(sys.path) #访问模块的时候   #['D:\Python\S20\day14\after', 'D:\Python\S20\day04', 'D:\Python\S20',
    print(sys.version)  #版本获取  解释好的版本号#3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]
    print(sys.platform)  #win32  #获取当前操作系统的平台位数
    print(sys.exit(1))  #正常退出时0 异常是1

    10.hashilib

     1.加密算法    作用:当做密码
    #判断 一致性
    # 明文: liuyang
    #密文:asjdfajldjafadflkadf  或者 *************
    # 2.加密后不可逆 不能解
    # 没有提示 世界上最难(金字塔)的都被中国人一年退了 没有绝对的安全
    # (md5 反推)现在已经不安全了 被人反推了
    # 3.sha1 ,sha256 ,sha512
    import hashlib
    md5 = hashlib.md5(''.encode('utf-8'))  #选择加密方式  加盐
    md5.update('liuyang'.encode('utf-8')) #将明文转成字节然后加密
    print(md5.hexdigest())#生成密文:#6b649039a388694c7306cb4d14041a14
    # 一些无聊的黑客把简单的(12345678) 哈希密文 都存到数据库上  去撞 遍历
    # 一年前暴力破解   叫做撞库
    md5 = hashlib.md5()  #选择加密方式  加盐 (实例化一个对象)
    md5.update('liuyang'.encode('utf-8')) #将明文转成字节然后加密
    print('没加盐',md5.hexdigest())#
    
    sha1 = hashlib.sha1()
    sha1.update('liuyang'.encode('utf-8'))
    print(sha1.hexdigest())
    
    sha512 = hashlib.sha512()
    sha512.update('liuyang'.encode('utf-8'))
    print(sha512.hexdigest())
    
    print(len(sha512.hexdigest()))
    a = 'dfca38e23cf278c6ce60f919aa4b1f89da1622efd25bd5f8a55b7b3cfb12d6b3042059894f82d5186118c8e63d8a74da37c0ed841eb8aeee7e2977b33fa84c5a'
    print(len(a))# 128位
    
    # 优点 : 安全  缺点 :慢
    # md5 优点:安全 快 缺点:易破解
    user , pwd = input('user|pwd:').strip().split('|')
    import hashlib
    md5 = hashlib.md5(str(user).encode('utf-8'))
    md5.update(pwd.encode('utf-8'))
    print(md5.hexdigest())
    #liuyang|liuyang333     # 因为有一些人都用相同的密码但是不会用相同的用户名
    # eac5796d45d8525d6d23c341730e87ab
    #判断一致性
    View Code
    import hashlib
    md5 = hashlib.md5()  #选择加密方式  加盐 (实例化一个对象)
    md5.update('liuyang'.encode('utf-8')) #将明文转成字节然后加密
    print('没加盐',md5.hexdigest())#
  • 相关阅读:
    原生代码实现Promise
    HTTP与HTTPS的区别
    windows常用命令-长期更新
    git 常用命令
    原型和原型链
    vue 中一些API 或属性的常见用法
    移动端屏幕适配
    Nuxt.js(开启SSR渲染)
    vue+element-ui 实现分页(根据el-table内容变换的分页)
    vue中引入jQuery和bootstrap
  • 原文地址:https://www.cnblogs.com/Doner/p/10557835.html
Copyright © 2020-2023  润新知