模块

1.序列化

1.json
文件: 写 json.dump(对象,文件) mode = "a"   读 json.load(文件) mode = "r"
字符串:dump(对象):将对象序列化成字符串   loads(字符串):将字符串序列化成对象
        
import json
l = [1,2,3,7,5]
print(json.dumps(l),type(json.dumps(l)))#[1, 2, 3, 7, 5] <class 'str'>
s = json.dumps(l)
print(json.loads(s),type(json.loads(s)))#[1, 2, 3, 7, 5] <class 'list'>

读写文件
import json
l = [1,2,3,4,8]
f = open("info",mode="a",encoding="utf-8")
json.dump(l,f)
f.close()

f = open("info",mode="r",encoding="utf-8")
print(json.load(f))


字典
字典中有中文时,想读出中文需加ensure_ascii=False
dic = {"h":3,"姓名":"oooo"}
f = open("info1","a",encoding="utf-8")
json.dump(dic,f,ensure_ascii=False)

f = open("info1","r",encoding="utf-8")
print(json.load(f))

读写多个文件
f = open("info","a",encoding="utf-8")
str1 = json.dumps(l1,ensure_ascii=False)
f.write(str1+"\n")
str2 = json.dumps(l2,ensure_ascii=False)
f.write(str2+"\n")
str3 = json.dumps(l3,ensure_ascii=False)
f.write(str3+"\n")
f.close()
f = open("info","r",encoding="utf-8")
for i in f:
    print(json.loads((i)))
    
    
2.pickle
dumps:将对象转化为bytes类型,类似于字节
pickle.dumps(对象) 返回类似于字节

loads将bytes序列化为对象
pick.loads(字节)

文件:dump 写 wb
     loadds 读 rb
import pickle
s = pickle.dumps(l1)
l2 = pickle.loads(s)
print(l2)
f = open("info","wb")
pickle.dump(l1,f)
f.close()

写多个
l1 = [1,2,2,3,6,5,777,"宝元a"]
l2 = [1,2,3,6,5,"搜索你家"]
l3 = [1,9,3,6,5,]
import pickle
f = open("info","wb")
pickle.dump(l1,f)
pickle.dump(l2,f)
pickle.dump(l3,f)
f.close()
读多个
f = open("info","rb")
print(pickle.load(f))

2. o s模块

os模块是与操作系统交互的一个接口
1.工作目录
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径  **** 
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..') 

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

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

4.路径相关
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的大小 ***

3. sys

sys -- 与python解释器交互的接口
import sys
if sys.argv[-1] == "alex":
    print("dsb")
else:
    print("李业dsb")
print(sys.argv[-1])  # *** 当前文件运行['F:/s24/day17/06 sys.py']


import sys
print(sys.exit(1))   #

import sys
print(sys.version)  # 获取解释器版本

import sys
print(sys.path)     # 添加自定义模块查找路径 *****

import sys
print(sys.platform)   # *** 区分操作系统然后进行相关逻辑操作

4. h a s h l i b

 加密方式 md5,sha1,sha256,sha512
1.只要明文相同密文就是相同的
2.只要明文不相同密文就是不相同的
3.不能反逆(不能解密)
最常用是的md5,平时加密的时候使用sha1
加密 md5
import hashlib
md5 = hashlib.md5()
md5.update("alex".encode("utf-8"))
print(md5.hexdigest())

固定加盐
import hashlib
md5 = hashlib.md5("uuu".encode("utf-8"))
md5.update("alex".encode("utf-8"))
print(md5.hexdigest())

动态加盐(安全性能提高)
import hashlib
uername = input("账号")
password = input("密码")
ret = hashlib.md5(uername.encode("utf-8"))
ret.update(password.encode("utf-8"))
print(ret.hexdigest())

5. c o l l e c t i o n s

在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典

有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66 , 'k2': 小于66}
li = [11,22,33,44,55,77,88,99,90]
result = {}
for row in li:
    if row > 66:
        if 'key1' not in result:
            result['key1'] = []
        result['key1'].append(row)
    else:
        if 'key2' not in result:
            result['key2'] = []
        result['key2'].append(row)
print(result)

from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)
for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

        
from collections import Counter
c = Counter("csdcsdcsdcsdcsdcs")
print(c) 
#计算次数
posted @ 2019-08-14 22:41  corei5tj  阅读(239)  评论(0编辑  收藏  举报