1. json序列化模块
# ### json
"""
所有编程语言都能够识别的数据格式叫做json,是字符串 json: 将数据类型序列化成字符串
pickle:将数据类型序列化成字节流 json能够转换的数据类型:
int float bool str list tuple dict None
"""
import json
# ### (1) json基本语法
"""dumps 和 loads 是一对,用来序列化和反序列化数据的
ensure_ascii = False : 显示中文
sort_keys = True : 对字典的键进行排序
""" # dumps 把任意对象序列化成一个str
dic = {"name":"常远","age":20,"sex":"男性","family":["爸爸","妈妈","妹妹"]}
res = json.dumps(dic,ensure_ascii=False,sort_keys=True)
print(res,type(res)) # loads 把任意str反序列化成原来数据
dic = json.loads(res)
print(dic,type(dic)) """dump 和 load 是一对,根据文件进行操作存储"""
dic = {"name":"常远","age":20,"sex":"男性","family":["爸爸","妈妈","妹妹"]}
with open("ceshi1.json",mode="w",encoding="utf-8") as fp:
json.dump(dic,fp,ensure_ascii=False) with open("ceshi1.json",mode="r",encoding="utf-8") as fp:
dic = json.load(fp)
print(dic , type(dic)) # ### (2)json 和 pickle之间的区别
# json
"""
json可以连续dump , 但是不能连续load
load 是一次性拿出所有数据进行反序列化
"""
dic1 = {"a":1,"b":2}
dic2 = {"c":3,"d":4}
with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp:
json.dump(dic1,fp)
fp.write("\n")
json.dump(dic2,fp)
fp.write("\n") # 不能够把两个字典都识别出来
"""
# error
with open("ceshi2.txt",mode="r",encoding="utf-8") as fp:
res = json.load(fp)
print(res)
""" # 文件对象是迭代器
from collections import Iterator
res = isinstance(fp,Iterator)
print(res) # loads方法来识别出每一个字典
with open("ceshi2.txt",mode="r+",encoding="utf-8") as fp:
for i in fp:
# print(i,type(i))
dic = json.loads(i)
print(dic ,type(dic) ) # pickle
"""
pickle 可以连续dump , 也可以连续load
pickle在插入数据时,在数据末尾写了结束的标识符,所以可以识别各个数据
"""
import pickle
dic1 = {"a":1,"b":2}
dic2 = {"c":3,"d":4}
with open("ceshi3.pkl",mode="wb") as fp:
pickle.dump(dic1,fp)
pickle.dump(dic2,fp) # 可以连续load
print("<===>")
with open("ceshi3.pkl",mode="rb") as fp:
"""
dic = pickle.load(fp)
print(dic,type(dic))
dic = pickle.load(fp)
print(dic,type(dic))
"""
try:
while True:
dic = pickle.load(fp)
print(dic)
except:
pass """
try .. except ..
try:
把有问题的代码写到try代码块中
except:
如果发生了报错,直接执行except这个代码块
""" """
# 总结:
# json 和 pickle 两个模块的区别:
(1)json序列化之后的数据类型是str,所有编程语言都识别,
但是仅限于(int float bool)(str list tuple dict None)
json不能连续load,只能一次性拿出所有数据
(2)pickle序列化之后的数据类型是bytes,
所有数据类型都可转化,但仅限于python之间的存储传输.
pickle可以连续load,多套数据放到同一个文件中
"""
json序列化模块 示例代码
2. random 模块
# ### 随机模块 random
import random
#random() 获取随机0-1之间的小数(左闭右开) 0<= x < 1
res = random.random()
print(res) #randrange() 随机获取指定范围内的整数(包含开始值,不包含结束值,间隔值) # 一个参数 0~1
res = random.randrange(2)
print(res) # 二个参数 1~9
res = random.randrange(1,10)
print(res) # 三个参数
res = random.randrange(1,10,3) # 1 4 7
print(res) #randint() 随机产生指定范围内的随机整数 (了解)
res = random.randint(2,5) # 2 3 4 5
print(res) #uniform() 获取指定范围内的随机小数(左闭右开)
# 1 <= x < 3
res = random.uniform(1,3)
print(res) # -2 < x <= 1 参数的大小可以反着写,但不推荐.
res = random.uniform(1,-2)
print(res)
"""
# return a + (b-a) * self.random()
a = 1
b = -2
1 + (-2-1) * (0<= x < 1) 当x=0 => 1
1 + (-2-1) * (0<= x < 1) 当x=1 => -2
-2 < x <= 1
""" #choice() 随机获取序列中的值(多选一)
lst = ["李德亮","林明辉","林荫站"]
res = random.choice(lst)
print(res) # 自定义choice
lst = ["李德亮","林明辉","林荫站"]
def mychoice(lst):
num = len(lst) #
rand_num = random.randrange(num) # 0 1 2
return lst[rand_num]
print( mychoice(lst) ) #sample() 随机获取序列中的值(多选多) [返回列表]
lst = ["李德亮","林明辉","林荫站","王文","周杰伦","郭富城"]
res = random.sample(lst,2)
print(res) #shuffle() 随机打乱序列中的值(直接打乱原序列)
lst = [ 1,2,3,4]
res = random.shuffle(lst)
print(res) # None 返回值没有意义
print(lst)
# 小案例:随机验证码
"""
# a -> 97 z->122
# A -> 65 Z->90 # print( ord("a"))
# print( chr(97) )
"""
def func():
strvar = ""
# 循环四次
for i in range(4):
#a~z
sm_char = chr(random.randrange(97,123))
#A-Z
bg_char = chr(random.randrange(65,91))
#0~9
num = str(random.randrange(10))
#把可能的字符元素塞到列表
lst = [sm_char,bg_char,num]
#通过choice抽取其中的元素
strvar += random.choice(lst)
# 返回最后的字符串
return strvar
res = func()
print(res)
random模块函数 示例代码
3. time 模块
# ### 时间模块 time
import time
#time() 获取本地时间戳 (时间戳 : 秒数)
res = time.time()
print(res) #mktime() 通过[时间元组]获取[时间戳] (参数是时间元组)
ttp = (2019,10,28,11,28,30,0,0,0)
res = time.mktime(ttp)
print(res) #localtime() 通过[时间戳]获取[时间元组] (默认当前时间)
res = time.localtime() # 默认当前时间
print(res) res = time.localtime(1572233310)
print(res) #ctime() 通过[时间戳]获取[时间字符串] (默认当前时间)
res = time.ctime(1572233310)
print(res) res = time.ctime()
print(res) #asctime() 通过[时间元组]获取[时间字符串](参数是时间元组) (了解)
ttp = (2019,10,28,11,34,30,1,0,0)
res = time.asctime(ttp)
print(res) # 优化版 (推荐)
ttp = (2019,10,28,11,34,30,0,0,0)
res = time.mktime(ttp)
time_str = time.ctime(res)
print(time_str) #strftime() 通过[时间元组]格式化[时间字符串] (格式化字符串,[可选时间元组参数])
ttp = (1955,10,28,11,39,10,0,0,0)
# strftime 在linux系统中支持中文,windows不支持
res = time.strftime("%Y-%m-%d %H:%M:%S 比尔盖茨,世界首富生日") # (默认以当前时间进行转换)
print(res) res = time.strftime("%Y-%m-%d %H:%M:%S 比尔盖茨,世界首富生日",ttp)
print(res) #strptime() 通过[时间字符串]提取出[时间元组] (时间字符串,格式化字符串)
strvar = "1955-10-28 11:39:10 比尔盖茨,世界首富生日"
strvar2 = "%Y-%m-%d %H:%M:%S 比尔盖茨,世界首富生日"
res = time.strptime(strvar,strvar2)
print(res) #sleep() 程序睡眠等待
"""
time.sleep(2)
print("睡醒了")
"""
#perf_counter() 用于计算程序运行的时间 (了解)
startime = time.perf_counter()
for i in range(10000000):
pass
endtime = time.perf_counter()
res = endtime - startime
print(res) startime = time.time()
for i in range(10000000):
pass
endtime = time.time()
res = endtime - startime
print(res)
time 模块函数 示例代码
4. zipfile 压缩模块
# ### zipfile 压缩模块 (zip)
import zipfile # (1) 压缩文件
# 打开文件
zf = zipfile.ZipFile("ceshi1.zip","w",zipfile.ZIP_DEFLATED)
# 写入内容 write(路径,别名)
zf.write("/bin/bzmore","bzmore")
zf.write("/bin/cat","cat")
# 创建一个临时文件 叫tmp , 在tmp文件夹中放入chacl文件
zf.write("/bin/chacl","tmp/chacl")
# 关闭文件
zf.close() # (2) 解压文件
# 打开文件
zf = zipfile.ZipFile("ceshi1.zip","r")
# 解压单个文件 extract(文件名,路径)
# zf.extract("bzmore","ceshi1")
# 解压所有文件
zf.extractall("ceshi2")
# 关闭文件
zf.close() # (3) 追加文件 [支持with语法]
with zipfile.ZipFile("ceshi1.zip","a",zipfile.ZIP_DEFLATED) as zf:
zf.write("/bin/chmod","chmod") # (4) 查看压缩包中的内容 namelist
with zipfile.ZipFile("ceshi1.zip","r") as zf:
lst = zf.namelist()
print(lst)
zipfile 压缩模块 示例代码
5. os模块 -系统进行操作
# ### os模块 -系统进行操作
import os
# os.system("touch ceshi1028.txt")
# os.system("rm -rf ceshi1028.txt")
# os.system("ipconfig") #popen() 执行系统命令返回对象,通过read方法读出字符串
"""优点:在输入字符串时,可以优先转换成utf-8编码集"""
# obj = os.popen("ipconfig")
obj = os.popen("ifconfig")
print(obj)
res = obj.read()
print(res) #listdir() 获取指定文件夹中所有内容的名称列表
lst = os.listdir("/home/wangwen")
print(lst) #getcwd() 获取当前文件所在的默认路径
res = os.getcwd()
print(res) # /mnt/hgfs/gongxiang8/day15 # __file__ 路径 + 文件名
print(__file__) #chdir() 修改当前文件工作的默认路径
"""
os.chdir("/home/wangwen/mywork")
os.system("mkdir ceshi100")
"""
#environ 获取或修改环境变量
print( os.environ )
print( os.environ["PATH"] )
os.environ["PATH"] += ":/home/wangwen/mywork" """
environ(
{'PATH':
'/root/PycharmProjects/untitled/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin', 'XAUTHORITY': '/home/wangwen/.Xauthority', 'TERM': 'xterm-256color', 'LANG': 'zh_CN.UTF-8', 'PS1': '(venv) ', 'SUDO_USER': 'wangwen', 'DISPLAY': ':0', 'SUDO_GID': '1000', 'MAIL': '/var/mail/root', 'USERNAME': 'root', 'LOGNAME': 'root', 'PWD': '/mnt/hgfs/gongxiang8/day15', 'SUDO_UID': '1000', 'PYCHARM_HOSTED': '1', 'PYCHARM_DISPLAY_PORT': '36249', 'LANGUAGE': 'zh_CN:zh', 'PYTHONPATH': '/root/PycharmProjects/untitled:/home/wangwen/mysoft/pycharm-2019.1.2/helpers/pycharm_matplotlib_backend:/home/wangwen/mysoft/pycharm-2019.1.2/helpers/pycharm_display',
'SHELL': '/bin/bash', 'PYTHONIOENCODING': 'UTF-8', 'OLDPWD': '/home/wangwen/mysoft/pycharm-2019.1.2/bin', 'USER': 'root', 'SUDO_COMMAND': './pycharm.sh', 'VIRTUAL_ENV': '/root/PycharmProjects/untitled/venv', 'PYTHONUNBUFFERED': '1', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:', 'HOME': '/home/wangwen'})
""" """
[linux] 通过python操作linux里面的脚本,要把脚本的路径添加到环境变量path路径中
(1) 在/home/wangwen/mywork 创建文件abc.sh
(2) 在abc.sh里 写入ifconfig这个命令
(3) 修改abc.sh权限,改成777
(4) os.environ["PATH"] += ":/home/wangwen/mywork" 把脚本对应的路径添加到环境变量中
(5) python system这个命令执行 abc.sh 这个脚本 [windows] cmd中通过命令调出qq窗口
(1) 找到该文件的路径,右键属性找路径
(2) 右键我的电脑属性->高级系统设置->系统变量Path->新建把刚才的路径黏贴上去
(3) cmd -> QQScLauncher.exe
""" os.system("abc.sh") #--os 模块属性 #name 获取系统标识 linux,mac ->posix windows -> nt
print(os.name) #sep 获取路径分割符号 linux,mac -> / window-> \
print( os.sep ) #linesep 获取系统的换行符号 linux,mac -> \n window->\r\n 或 \n
print( os.linesep )
print( repr(os.linesep) )
OS模块函数 示例代码
day15