Python自动化开发学习4-3

简介:

JSON 和 pickle

序列化:把数据对象变成字符串的形式,这样可以保存在文件中。反之就是反序列化

python自带的str()可以完成序列化,然后eval()可以反序列化,但是我们先把他们忘记。不知道适用范围是多大。

我们用json的规范来做序列化和反序列化。

1
2
3
4
5
6
7
8
9
10
11
12
13
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)

一种需求是序列化成字符串之后存入文件保存起来。下次要用的时候再读取文件,反序列化生成之前的数据。对于这种情况,对应有两个便捷的方法可以直接完成。

1
2
3
4
5
6
7
import  json
dica  =  { 'name' : 'Alice' ,
         'age' : 18 ,
         'from' : 'ShangHai'
         }
with  open ( "testjson.txt" , 'w' ,encoding = 'utf-8' ) as  file :
     json.dump(dica, file )

可以去查看一下,运行目录下是否生成了一个文件。然后再来反序列化

1
2
3
4
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

1
2
3
4
5
6
7
8
9
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


  1. bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。

  2. foo/: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/存放单元测试代码; (3) 程序的入口最好命名为main.py

  3. docs/: 存放一些文档。

  4. setup.py: 安装、部署、打包的脚本。

  5. requirements.txt: 存放软件依赖的外部Python包列表。

  6. README: 项目说明文件。

不同目录间进行模块调用

python里一个文件夹下如果有一个__init__.py的空文件,这就不是一个普通的文件夹了,这是一个包。

要调用包里的模块,可以使用:from 包名 import 模块名

要能够调用,还要先保证包的上级目录在环境变量里。要动态的获取到程序的目录和上级目录,并且导入环境变量,看下面的例子:

1
2
3
4
5
6
7
8
9
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_id
name
age
phone
dept
enroll_date
1
Adam Liu
25
13562984561
IT
2013-04-01
2
Barry Allen
22
13659874522
HR
2015-05-03
3
Clark Kent
30
13156998456
Sales
2016-04-22
4
Eddie Thawne
40
13566942130
HR
2009-03-01

不过这个表可能是这样存在你的文件里的:

1,Adam Liu,25,13562984561,IT,2013-04-01

现需要对这个员工信息文件,实现增删改查操作

一、可进行模糊查询,语法至少支持下面3种:

  1.   select name,age from staff_table where age > 22

  2.   select  * from staff_table where dept = "IT"

  3.       select  * from staff_table where enroll_date like "2013"

  4. 查到的信息,打印后,最后面还要显示查到的条数 

二、可创建新员工纪录,以phone做唯一键,staff_id需自增

三、可删除指定员工信息纪录,输入员工id,即可删除

四、可修改员工信息,语法如下:

  update staff_table set dept="Market" where dept = "IT"

注意:以上内容要充分使用函数,最大限度减少重复代码。










本文转自骑士救兵51CTO博客,原文链接:http://blog.51cto.com/steed/1981308,如需转载请自行联系原作者

相关文章
|
2月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
359 1
|
2月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
222 1
|
2月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
337 1
|
2月前
|
存储 数据采集 监控
Python定时爬取新闻网站头条:从零到一的自动化实践
在信息爆炸时代,本文教你用Python定时爬取腾讯新闻头条,实现自动化监控。涵盖请求、解析、存储、去重、代理及异常通知,助你构建高效新闻采集系统,适用于金融、电商、媒体等场景。(238字)
405 2
|
2月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
183 4
|
3月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
530 7
|
3月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
10月前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
216 2
|
存储 算法 API
Python学习五:函数、参数(必选、可选、可变)、变量、lambda表达式、内置函数总结、案例
这篇文章是关于Python函数、参数、变量、lambda表达式、内置函数的详细总结,包含了基础知识点和相关作业练习。
205 0

推荐镜像

更多