python基础(序列化(json/shelve/pickle)、random、os、sys、hashlib等)

一、 序列化:

  1.1 json方法:

    1.1.1 总结:

json.load()  参数文件句柄(r) 将文件中字符串转换成字典
json.dump()  对象(字典) 文件句柄(w) 将字典转换字符串写入到文件中
json.dumps() 对象(字典) 将字典转换成字符串
 json.loads() 字符串(字典)  将字符串转换成字典

    1.1.2 json的操作方法:

import json

# 注意,json转换完的字符串类型的字典中的字符串是由""表示的
d = {'user': 'abc', 'pwd': 123}   # 将字典转换成字符串(序列化)
s = json.dumps(d)
print(s)

# 注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
s = '{"user": "abc", "pwd": 123}'   # 将字符串转换成字典(反序列化)
d = json.loads(s)
print(d)

# dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
d = {'user': 'abc', 'pwd': 123}   # 将字典转换成字符串,存入文件中
json.dump(d, open('register.txt', encoding='utf-8', mode='w'))

# load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
d = json.load(open('register.txt', encoding='utf-8', mode='r'))  # 将文件读出转换成字典
print(d)

# json格式化输出:
data = {'username': ['李华', '二愣子'], 'sex': 'male', 'age': 16}
json_dic2 = json.dumps(data, sort_keys=True, indent=2, separators=(',', ':'), ensure_ascii=False)  # ensure_ascii=False中文显示
print(json_dic2)
View Code

  1.2 pickle 方法:

    1.2.1 总结:

  

pickle.load() 参数文件句柄(rb) 将文件中字节码转换成字典
pickle.dump() 对象(字典) 文件句柄(wb) 将字典转换字节码写入到文件中
pickle.dumps()   对象(字典) 将字典转换成字节码
pickle.loads()  字节(字节码)  将字节码转换成字典

     1.2.2  pickle 的操作方法:

  
# pickle操作方法:

import pickle

# 缺点:只适用python特有的类型
d = {'user': 'abc', 'pwd': 123}   # 将字典转换成字节
s = pickle.dumps(d)
print(s)

s = b'\x80\x03}q\x00(X\x04\x00\x00\x00userq\x01X\x03\x00\x00\x00abcq\x02X\x03\x00\x00\x00pwdq\x03K{u.'
d = pickle.loads(s)  # 将字节转化成字典
print(d)


d = {'user': 'abc', 'pwd': 123}   # 将字典转换成字节,存入文件中
pickle.dump(d, open('register.txt', mode='wb'))  # 注意:wb方式写入,不需要指定编码方式


d = pickle.load(open('register.txt', mode='rb'))  # 将文件中的字节读出转换成字典 wb方式读出
print(d)
View Code

    1.2.3  pickle的类方法:

  
# 序列化方法:

import pickle


# 创建新的类
class Course:
    def __init__(self, name, price, period):
        self.name = name
        self.price = price
        self.period = period

# 实例化:
python = Course('python',20000,'6 months')
linux = Course('linux', 15800, '5 months')

# 文件写入:
with open('pickle_file', 'ab') as f:
    pickle.dump(python, f)
    pickle.dump(linux, f)


# 文件读取:
with open('pickle_file', 'rb') as f:
    # 获取单一对象
    # obj1 = pickle.load(f)
    # obj2 = pickle.load(f)
    while True:
        try:
            obj = pickle.load(f)
            print(obj.__dict__)
        except EOFError:
            break
View Code

  1.3 shelve 方法:

    1.3.1 存储特点:

      类似于字典(文件 + 字典操作)

  
# shelve使用方法:

# 1.文件 + 字典操作

import shelve

# writeback = True 回写,直到成功写入文件
f = shelve.open('c', writeback=True)  # 创建文件


f['name'] = 'alex'   # 以字典形式写入文件
f['age'] = 18

# print(f['nann'])   # 查询写入文件内容,存在则返回值,否则报错

print(f.keys())   # KeysView(<shelve.DbfilenameShelf object at 0x000002404576C240>)
print(f.values())
print(f.items())

print(list(f.keys()))   # 获取key值 ['name', 'age']
print(list(f.values()))
print(list(f.items()))
View Code

二、 random 模块:

  2.1 操作方法:

  
import random

print(random.random())  # 获取0到1之间的随机的小数

print(random.randint(1, 5))  # 获取1-5之间的随机数 顾头顾腚

print(random.randrange(1, 5))  # 生成随机数,顾头不顾腚

print(random.randrange(1, 15, 2))  # 生成1-15之间的奇数位随机数,可以设置步长
print(random.randrange(0, 15, 2))  # 生成0-15之间的偶数数位随机数

lst = ['张开', '宝元', '佩奇', '太白']
print(random.choice(lst))  # 随机选择一个元素

lst = ['张开', '宝元', '佩奇', '太白']
print(random.choices(lst, k=2))  # 可以指定随机生成个数,但可能会存在两个随机元素相同情况(元素重复)

lst = ['张开', '宝元', '佩奇', '太白']
print(random.sample(lst, k=2))  # 可以指定随机生成个数,生成随机元素不会重复

lst = [1, 2, 3, 4, 5, 6]
random.shuffle(lst)  # 打乱列表元素
print(lst)

# 小实例:
U = chr(random.randrange(65, 91))  # A-Z
L = chr(random.randrange(97, 123))  # a-z
n1 = random.randrange(0, 10)  # 0-9
n2 = random.randrange(0, 10)  # 0-9
print(U, L, n1, n2)  # 生成验证码
View Code

三、 OS模块:

  3.1 特点:

    os模块是与操作系统交互的一个接口​

  3.2 操作方法:

  
<em>#和文件夹相关
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印


# 和文件相关
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息


# 和操作系统差异相关
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'


# 和执行系统命令相关
os.system("bash command")  运行shell命令,直接显示
os.popen("bash command).read()  运行shell命令,获取执行结果
os.environ  获取系统环境变量


#path系列,和路径相关
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第二个元素。
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小<br></em>


os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')


# 注意:os.stat('path/filename') 获取文件/目录信息 的结构说明
stat 结构:
st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
View Code

四、 sys  模块:

  4.1 操作方法:

  
# sys模块是与python解释器交互的一个接口

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version        获取Python解释程序的版本信息
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称
View Code

五、 加密方法:

  5.1 加密算法应用场景: 

    做密码
    判断一致性
    加密后不可逆 不能解

  5.1 MD5方法:

  
# MD5加密:

import hashlib


md5 = hashlib.md5()  # 普通方式 加密方式
md5.update('alex3714'.encode('utf-8'))  # 将明文转成字节然后进行加密
print(md5.hexdigest())  # 生成密文


md5 = hashlib.md5(''.encode('utf-8'))  # 选择加密方式  加盐(salt)
md5.update('alex3714'.encode('utf-8'))  # 将明文转成字节然后进行加密
print(md5.hexdigest())  # 生成密文





# 小实例:

user, pwd = input('user|pwd:').strip().split('|')
import hashlib

md5 = hashlib.md5(str(user).encode('utf-8'))  # salt用法
md5.update(pwd.encode('utf-8'))
print(md5.hexdigest())
View Code

  5.2 sha1类型方法:   

  
# sha加密:
# sha加密(sha1,sha256,sha512):

import hashlib

sha1 = hashlib.sha1()   # sha512加密
sha1.update('alex3714'.encode('utf-8'))
print(sha1.hexdigest())

sha256 = hashlib.sha256()   # sha512加密
sha256.update('alex3714'.encode('utf-8'))
print(sha256.hexdigest())

sha512 = hashlib.sha512()   # sha512加密
sha512.update('alex3714'.encode('utf-8'))
print(sha512.hexdigest())
View Code

 

posted @ 2019-03-19 18:06  Amorphous  阅读(203)  评论(0编辑  收藏  举报