设为首页 收藏本站
查看: 957|回复: 0

[经验分享] Python自动化开发学习4-3

[复制链接]

尚未签到

发表于 2018-8-10 13:13:37 | 显示全部楼层 |阅读模式
  JSON 和 pickle
  序列化:把数据对象变成字符串的形式,这样可以保存在文件中。反之就是反序列化
  python自带的str()可以完成序列化,然后eval()可以反序列化,但是我们先把他们忘记。不知道适用范围是多大。
  我们用json的规范来做序列化和反序列化。
import json  
dica = {'name':'Alice',
  
        'age':18,
  
        'from':'ShangHai'
  
        }
  
stra = json.dumps(dica)  # 序列化
  
print(type(stra),stra)
  
dica2 = json.loads(stra)  # 反序列化
  
print(type(dica2),dica2)
  
strb = '{"name":"Jack","age":22,"from":"BeiJing"}'  # JSON只认双引号,所以字符串内部要双引号
  
print(type(strb),strb)
  
dicb = json.loads(strb)  # 反序列化
  
print(type(dicb),dicb)
  一种需求是序列化成字符串之后存入文件保存起来。下次要用的时候再读取文件,反序列化生成之前的数据。对于这种情况,对应有两个便捷的方法可以直接完成。
import json  
dica = {'name':'Alice',
  
        'age':18,
  
        'from':'ShangHai'
  
        }
  
with open("testjson.txt",'w',encoding='utf-8') as file:
  
    json.dump(dica,file)
  可以去查看一下,运行目录下是否生成了一个文件。然后再来反序列化
import json  
with open("testjson.txt",'r',encoding='utf-8') as file:
  
    data = json.load(file)
  
print(type(data),data)
  上面的JSON的序列化并不支持python所有的数据类型。但是JSON是通用的规范,也就是JSON序列化之后的数据到其他语言环境也能识别。
  对于不支持的数据类型,应该可以加一步编解码,但是如果别的语言环境也不支持这个数据类型,那么即使能序列化也没有用。
  不过python序列化保存之后再给python反序列化使用,就没有数据类型的问题,那么可以使用pickle。
  python的pickle模块实现了python的所有数据序列和反序列化。基本上功能使用和JSON模块没有太大区别,方法也同样是dumps/dump和loads/load
import pickle  
dica = {'name':'Alice',
  
        'age':18,
  
        'from':'ShangHai'
  
        }
  
stra = pickle.dumps(dica)  # 序列化
  
print(type(stra),stra)  # 这里bytes类型了,只有二进制类型才有可能把所有的数据类型都序列化
  
dica2 = pickle.loads(stra)  # 反序列化
  
print(type(dica2),dica2)
  软件目录开发规范
  假设项目名称是Foo,项目名称的首字母大写。下面是一个简单的目录结构:
  Foo/
  |-- bin/
  |   |-- foo
  |
  |-- foo/
  |   |-- tests/
  |   |   |-- __init__.py
  |   |   |-- test_main.py
  |   |
  |   |-- __init__.py
  |   |-- main.py
  |
  |-- docs/
  |   |-- conf.py
  |   |-- abc.rst
  |
  |-- setup.py
  |-- requirements.txt
  |-- README

  •   bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。
  •   foo/: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/存放单元测试代码; (3) 程序的入口最好命名为main.py。
  •   docs/: 存放一些文档。
  •   setup.py: 安装、部署、打包的脚本。
  •   requirements.txt: 存放软件依赖的外部Python包列表。
  •   README: 项目说明文件。
  不同目录间进行模块调用
  python里一个文件夹下如果有一个__init__.py的空文件,这就不是一个普通的文件夹了,这是一个包。
  要调用包里的模块,可以使用:from 包名 import 模块名
  要能够调用,还要先保证包的上级目录在环境变量里。要动态的获取到程序的目录和上级目录,并且导入环境变量,看下面的例子:
import os,sys  
print(__file__)  # 打印相对路径
  
print(os.path.abspath(__file__))  # 打印绝对路径
  
print(os.path.dirname(os.path.abspath(__file__)))  # 打印上一级目录,这里是去掉了文件名
  
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))  # 打印再上一级目录
  
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # 只要这句,上面都不要
  
print(sys.path)  # 打印当前的环境变量
  
sys.path.append(BASE_DIR)  # 添加环境变量,这句也要。
  
print(sys.path)  # 看看现在的环境变量是否有增加
  实际使用时,我们只需要上面的2句就可以了。
  作业
  员工信息表:
staff_idnameagephonedeptenroll_date1Adam Liu2513562984561IT2013-04-012Barry Allen2213659874522HR2015-05-033Clark Kent3013156998456Sales2016-04-224Eddie Thawne4013566942130HR2009-03-01  不过这个表可能是这样存在你的文件里的:
  1,Adam Liu,25,13562984561,IT,2013-04-01
  现需要对这个员工信息文件,实现增删改查操作
  一、可进行模糊查询,语法至少支持下面3种:

  •   select name,age from staff_table where age > 22
  •   select  * from staff_table where dept = "IT"
  •   select  * from staff_table where enroll_date like "2013"
  •   查到的信息,打印后,最后面还要显示查到的条数
  二、可创建新员工纪录,以phone做唯一键,staff_id需自增
  三、可删除指定员工信息纪录,输入员工id,即可删除
  四、可修改员工信息,语法如下:
  update staff_table set dept="Market" where dept = "IT"
  注意:以上内容要充分使用函数,最大限度减少重复代码。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-549709-1-1.html 上篇帖子: python计算当前输入时间的下一秒 下篇帖子: python实现的简版iconv-xgtiger的笔记博客
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表