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

day15-Python运维开发基础(json序列化模块、random / time / zipfile / OS模块函数)的更多相关文章

  1. Python运维开发基础10-函数基础【转】

    一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...

  2. Python运维开发基础09-函数基础【转】

    上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...

  3. Python运维开发基础08-文件基础【转】

    一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...

  4. Python运维开发基础07-文件基础【转】

    一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...

  5. Python运维开发基础06-语法基础【转】

    上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...

  6. Python运维开发基础05-语法基础【转】

    上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...

  7. Python运维开发基础04-语法基础【转】

    上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...

  8. Python运维开发基础03-语法基础 【转】

    上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...

  9. Python运维开发基础02-语法基础【转】

    上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...

随机推荐

  1. centos610无桌面安装libreoffice

    Centos610系列配置 #安装文件 yum -y install libreoffice #安装中文包 yum -y install libreoffice-langpack-zh-Han* #安 ...

  2. 「CF911F」Tree Destruction

    传送门 Luogu 解题思路 显然的贪心策略,因为每次都要尽量使得删点后的收益最大. 我们可以求出树的直径(因为树上的任意一个节点与其距离最远的点一定是直径的端点). 然后我们对于所有不是直径上的点, ...

  3. ES6:let 与 const

    在ES6中,let 用来定义变量,const 用来定义常量 事实上var可以看成是js语言设计上的错误,但是不能移除,因为需要向后兼容 于是提出了一个新的关键字let,可以将let看成更完美的var ...

  4. JavaSE复习~Java语言发展史

    Java概述 什么是Java语言? Java语言是美国Sun公司(Stanford University NetWork),在1995年推出的高级编程语言. 所谓编程语言,是计算机的语言,人们可以使用 ...

  5. 14. 深入解析Pod对象(一)

    14. 深入解析Pod对象(一) """ 通过前面的讲解,大家应该都知道: Pod,而不是容器,它是 Kubernetes 项目中的最小编排单位.将这个设计落实到 API ...

  6. Passive Client Feature

    Q. How is the passive client feature used on Wireless LAN Controllers? A. Passive clients are wirele ...

  7. Codeforces Global Round 5E(构造,思维)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int main(){ ios::sync_w ...

  8. BinaryTree(二叉树)

    我认为二叉树的递归实现体现了递归思想的一些重要性质,如果对递归的理解不够的话,想利用递归来实现是很费劲的(实际上我现在都还有些懵...),虽然会用,但一些地方不能弄清楚原因. 经过几天的学习,看了许多 ...

  9. 8.1.1默认的map函数、reduce函数、分区函数

    1.1.1         默认的map函数和reduce函数 (1)Maper和Reuducer默认类 如果没有指定maper类和reduce类,则会用默认的Maper和Reuducer类去处理数据 ...

  10. Java自学-集合框架 ArrayList和HashSet的区别

    Java ArrayList和HashSet的区别 示例 1 : 是否有顺序 ArrayList: 有顺序 HashSet: 无顺序 HashSet的具体顺序,既不是按照插入顺序,也不是按照hashc ...