理想还是现实,这是个问题。json、p'ickle、time、datetime、random、os模块,第二十九天

我曾凝视深渊,并踏入深渊,但我拼出光明,并坚定的认为我能摒弃深渊中的七情六欲,最后我才发现,自己也是个人,而深渊永远是深渊,我可以靠自己的意志力控制六欲,可无法走出深渊赋予我的七情!!!


什么是序列化/反序列化

序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络运输

发序列化就是硬盘中或者网络中传来的一种数据格式转换成内存中数据结构

为什么要有

1、可以保存程序的运行状态

2、数据的跨平台交互

怎么用

json

    优点:跨平台性强

    缺点:只能支持/对应python部分的数据类型

pickle

    优点:可以支持/对应所有python的数据类型

    缺点:只能被python识别,不能跨平台

json的序列化:序列化:内存中的数据类型,中间格式json

1、序列化得到json_str

json_str=json.dumps(dic)

2、把json_写入文件

with open('db.json','wt',encoding='utf-8') as f:
    f.write(json_str)

把1和2合为一步

with open('db.json','wt',encoding='utf-8') as f:
    json.dump(dic,f)
注意:json格式不能识别单引号,全都是双引号

json的反序列化:

反序列化:中间格式json,内存中的数据类型

1、从文件中读取json_str

with open('db.json','rt',encoding='utf-8') as f:
    json_str=f.read()

2、将json_str转成内存中的数据类型

dic=json.loads(json_str)

把1和2可以合作一步

with open('db.json','rt',encoding='utf-8') as f:
    dic=json.load(f)

注意:用eval反序列化的缺陷

with open('db.json','rt',encoding='utf-8') as f:
    s=f.read() #s ='[1, true, null]'
    dic=eval(s) #eval('[1, true, null]')
    print(dic['name'])

pickle序列化和反序列化与json同理,只不过pickle写入读取的是二进制,而json是文本


time模块:

时间分为三种格式:

1、时间戳:time.time()

2、格式化的字符串形式:time.strftime('%Y %m %d  %X')

3、结构化的时间/时间对象

time.localtime()中国的标准时间

time.gmtime()世界标准时间

时间三种格式的转换:

结构化的时间strftime成格式化的字符串时间
格式化的字符串时间strptime成结构化的时间
时间戳localtime/gmtime成结构化的时间
结构化的时间模块time成时间戳
结构化的时间asctime成时间串
时间戳ctime成时间串

datetime:

获取格式化字符形式的时间麻烦

时间戳与格式化时间之间的转换麻烦

获取之前或者未来的时间麻烦


获取当前时间:

datetime.datetime.now()

格式化时间转换成当前时间

datetime.datetime.fromtimestamp(1231233213)

当前时间加减天数

datetime.datetime.now() + datetime.timedelta(days=3)

替换时间戳中的年份

s=datetime.datetime.now()
print(s.replace(year=2020))


random模块

random.random()随机0-1中的小数

random.randint(1,3) 随机取出1-3之间的整数,包括1和3

random.randrange(1,3) 随机取出1-3之间的整数,只包括1

random.choice([1,'cyd',[1,2]) 随机取出这个列表中的一个值

random.sample([1,'cyd',[4,5],2)) 随机取出这个列表中的两个值

random.uniform(1,3) 随机取出1-3 中的小数

item=['a','b','c','d']
random.shuffle(item)# 打乱这个列表的顺序,可变


os模块

os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径

os.chdir("dirname")改变当前脚本工作目录,相当于shell下cd

os.curdir 返回当前目录 ('.')

os.pardir() 获取当前目录的父目录字符串名:('..')

os.makedir('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下为"\t\n",Linux下为"\n"

os.pathsep 输出用于分割文件路径的字符串,win下为;,Linux下为:

os.name 输出字符串指示当前使用平台,win为'nt',Linux为'posix'

os.system("base command") 运行shell命令,直接显示

os.environ 获取系统环境变量

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.isable(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.pathn.getmtime(path)返回path所指向的文件或者目录的最后修改时间

os.path.getsize(path)返回path的大小


Over,Thanks

猜你喜欢

转载自blog.csdn.net/weixin_42157426/article/details/80747201