热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python序列化、date、random、os模块

知识点一:序列化与反序列化(json和pickple)01什么是序列化反序列化序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者

知识点一:序列化与反序列化(json和pickple)

01 什么是序列化/反序列化
    序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输
    发序列化就是硬盘中或者网络中传来的一种数据格式转换成内存中数据结构

02 为什要有
    1、可以保存程序的运行状态
    2、数据的跨平台交互

03 怎么用
    json
        优点:
            跨平台性强
        缺点:
            只能支持/对应python部分的数据类型

    pickle
        优点:
            可以支持/对应所有python的数据类型
        缺点:
            只能被python识别,不能跨平台
   
 json:
  序列化json.dump():是将字典转换成字符串类型,写入文件
  反序列化json.load():是将文件中的字符串类型,转换为字典类型读出
  
 pickle:
  序列化pickle.dump():是将字典转换成bytes类型,写入文件
  序列化pickle.load():是将从文件中将bytes类型,转换为字典类型读出
 


实验:
json序列化:内存中的数据类型------>中间格式json
1.序列化得到json_str (dumps接收1个参数)
json_str=json.dumps(user_info)
2.把json_str写入文件
with open('db.json','w',encoding='utf-8') as f:
    f.write(json_str)
1.2合并(用dump()接收2个参数)
with open('da.json','w',encoding='utf-8') as f:
    json.dump(user_info,f)  #文件的输出结果双引号 {"name": "yangzhizong", "age": 27}
   

总结:json格式不能识别单引号,全都是双引号
 转换后单引号默认都被转成了双引号

json的反序列化:
import json
1.从文件中读取db.json
with open('db.json','r',encoding='utf-8') as f:
   user_info=f.read()      #str类型
2.将文件转换成内存中的数据类型
user_info=json.loads(user_info)      #反序列后变为dict字典类型

1和2可以合并
with open('db.json','r',encoding='utf-8') as f:
    db_json=json.load(f)
    print(db_json)  # 反序后变为dict类型 

 

pickle的序列化:
import pickle
name={'name':'yangzhizong','age':27}
1.序列化得到name
name=pickle.dumps(name)                  重点注意dumps(1个参数)               
print(name,type(name))   #name被转换成bytes类型 ,写入是应该用wb
2.把name写入文件
with open('db.pickle','wb',) as f:
    f.write(name)   #输出结果是二进制
1.2合并 (用dump()接收2个参数)                    重点注意dump(2个参数)
with open('db.pickle','wb',) as f:
    pickle.dump(name,f)  


pickle的反序列化
import pickle
with open('db.pickle','rb') as f:
    info=pickle.load(f)
    print(info,type(info))   #输出结果为dict字典
  

 

 

 
知识点二:模块
1)time和datetime
import time,datetime
 1.时间戳
 start= time.time()
 time.sleep(3)
 stop= time.time()
 print(stop - start)  #3.0001089572906494

 2.格式化的字符串形式
 显示格式:
 2018:06:20 16:23:22
 2018:06:20 16:23:22 PM
 print(time.strftime('%Y:%m:%d %X'))
 print(time.strftime('%Y:%m:%d %H:%M:%S %p ')) #%p表示上午和下午

 
 
 3.结构化的时间/时间对象
 显示格式:time.struct_time(tm_year=2018, tm_mon=6, ...)
 t1=time.localtime()
 print(t1)
 print(t1.tm_year)  #2018
 结果:time.struct_time(tm_year=2018, tm_mon=6, tm_mday=20, tm_hour=16, tm_min=28, tm_sec=48, tm_wday=2, tm_yday=171, tm_isdst=0)
  
 t1=time.gmtime() (是世界标准时间格式,会有时差的区别)
 print(t1)
 结果:time.struct_time(tm_year=2018, tm_mon=6, tm_mday=20, tm_hour=8, tm_min=28, tm_sec=48, tm_wday=2, tm_yday=171, tm_isdst=0)
 
 

 

 

 


 4.转换形式
 结构化时间与时间戳:
 显示格式:
 time.struct_time(tm_year=1970, tm_mon=1, tm_mday=15, tm_hour=14, tm_min=56, tm_sec=7, tm_wday=3, tm_yday=15, tm_isdst=0)
 time.struct_time(tm_year=1970, tm_mon=1, tm_mday=15, tm_hour=6, tm_min=56, tm_sec=7, tm_wday=3, tm_yday=15, tm_isdst=0)
 print(time.localtime(1234567))
 print(time.gmtime(1234567))
 
 
 
 结构化时间与格式化字符串时间
 print(time.strftime('%Y',time.localtime()))
 print(time.strptime('2011-03-07','%Y-%d-%m'))

 

# print(time.asctime())
 # print(time.ctime())
 # print(time.strftime('%a %b %d %H:%M:%S %Y'))

 # print(time.asctime(time.localtime()))
 # print(time.ctime(123123123))

 # print(time.strftime('%Y-%m-%d %X'))

 


 # 获取格式化字符串形式的时间麻烦
 # 时间戳与格式化时间之间的转换麻烦
 # 获取之前或者未来的时间麻烦
 
 
 
 import datetime

 # print(datetime.datetime.now())
 # print(datetime.datetime.fromtimestamp(1231233213))

 # print(datetime.datetime.now() + datetime.timedelta(days=3))
 # print(datetime.datetime.now() + datetime.timedelta(days=-3))


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



2)random随机取值
 import random
 print(random.random())  #(0,1) 默认是0-1之间的小数,不包含0/1
 print(random.randint(1,3)) #随机1-3整数包含、3
 print(random.randrange(1,3)) #顾头不顾尾
 print(random.choice([1,'egon',[1,2]])) #随机取一个值
 print(random.sample([1, 'aa', [4, 5]], 1)) # 最后一个数字代表随机取几个值的意思
 

random.shuffle():随机取值排序
import random
item=['a','b','c','d']
random.shuffle(item)
print(item)

 

 
3)os模块
 绝对路径:
 输出结果:E:\PycharmProjects\untitled\day18\课堂练习.py
 path=os.path.abspath(__file__)
 print(path)


 将路径分成目录和文件名以元祖形式返回
 输出结果:('E:\\PycharmProjects\\untitled\\day18', '课堂练习.py')
 path=os.path.split(os.path.abspath(__file__))
 print(path)

 返回path的目录os.path.split(path)的第一个元素
 输出结果:E:\PycharmProjects\untitled\day18
 print(os.path.dirname(os.path.abspath(__file__)))


 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。
 即os.path.split(path)的第二个元素
 print(os.path.basename(os.path.abspath(__file__)))


 判断目录是否存在,返回值是True或者False
 os.path.exists(.day19)

 判断是否是绝对路径(以盘符开始的c\d\e..),或相对路径(不是以盘符开始的)
 print(os.path.isabs(r'c:\a\b')) #True
 print(os.path.isabs(r'a\b'))  #False

 另外在linux里面是以左斜杠开始作为根目录的起始位置
 print(os.path.isabs(r'/a/b')) #True
 print(os.path.isabs(r'a/b'))  #False

 将多个路径组合后返回,取最后一个聚堆路径输出
 os.path.join(path1[, path2[, ...]])
 输出结果为:d:\a
 path=os.path.join(r'c:\\a','b','d:\\a') #第一个 \ 有转译的功能说明后面一个 \ 只是普通的字符
 print(path)


 获取文件的大小:
 输出结果为:5366
 path=os.path.getsize(r'E:\PycharmProjects\untitled\day18\课堂练习.py')
 print(path)

 

 

转:https://www.cnblogs.com/yangzhizong/p/9204542.html



推荐阅读
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • 设计模式——模板方法模式的应用和优缺点
    本文介绍了设计模式中的模板方法模式,包括其定义、应用、优点、缺点和使用场景。模板方法模式是一种基于继承的代码复用技术,通过将复杂流程的实现步骤封装在基本方法中,并在抽象父类中定义模板方法的执行次序,子类可以覆盖某些步骤,实现相同的算法框架的不同功能。该模式在软件开发中具有广泛的应用价值。 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
author-avatar
手机用户2602897411
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有