Python自动化开发学习4-3

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

  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 模块名

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

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"

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

时间: 2024-11-06 07:28:22

Python自动化开发学习4-3的相关文章

Python自动化开发学习12-MariaDB

关系型数据库 主流的关系型数据库大概有下面这些: Oracle : 甲骨文公司的企业级的数据库 SQL Server : 微软的 MySQL : 免费的数据库,现在也属于Oracle的旗下产品 MariaDB : 开源的数据库,MySQL的一个分支 PostgreSQL : 也是开源的 SQLite : 一款轻量级的数据库 DB2 : IBM的 RDBMS 术语 RDBMS(Relational Database Management System)即关系数据库管理系统,在开始之前,先了解下RD

Python自动化开发学习19-Django

接下来,我们把Django分为视图(View).路由系统(URL).ORM(Model).模板(Templates )这4块进行学习. 视图 提交数据 上节课已经用过 request.POST.get() 获取提交的数据了,现在来看看有多选框的情况,多选的话应该要提交多个数据.先写一个有单选.多选.下拉列表的html: <body> <form action="/choice/" method="post"> <p> 性别: &l

python自动化开发学习-9 socket网络编程

一. 简介 python提供了两个级别访问的网络服务: 低级别的网络服务支持节本的socket,它提供了标准的BSD sockets API,可以访问底层操作系统socket接口的全部方法. 高级别的网络服务模块socketserver,它提供了服务器中心类,可以简化网络服务器的开发. socket介绍 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix

Python自动化开发学习5

模块 在模块中,我们可以定义变量.函数,还有类(这个还没学到).总之应该就是所有的代码.先建一个文件,取名为module,py,内容如下: # 一下是module.py的内容 string = "This is module,py" def say_hi():     print("Hi") def test():     return "test in module.py" 在上面的模块中我们定义了1个变量和2个函数,现在我们要在另外一个文件中

Python自动化开发学习14

Web的三个层次 网页设计思路是把网页分成三个层次,即:结构层(HTML).表示层(CSS).行为层(Javascript).形象的比喻,先是HTML捏了一个人,然后CSS则是给人穿上衣服,最后通过JS让人动起来. Web服务的本质 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端.用户向服务器发送一个请求.然后服务器响应,将数据和格式发回给客户端,然后断开这个连接.客户端收到返回的数据后,通过浏览器将数据按照一定的格式呈现出来.整个过程就是

Python自动化开发学习15-JavaScript和DOM

初识JavaScript JavaScript(后面都简写为js)是一门独立的语言.浏览器本身就具有js解释器. js的存在形式 和css类似,js代码要放在<script>标签中.同样和css类似,还可以写在一个js文件中,比如文件名就叫 commons.js ,然后在head中引入 <script src="commons.js"></script> ,src的值就是js的文件路径.<script type="text/javas

Python自动化开发学习16-前端内容综合进阶

css补充 这里再补充几个css的知识点,下面会用到 最小宽度-min-width 设置元素的最小宽度.举例说明,比如设置一个百分比的宽度,那么元素的宽度的像素值是会随着页面大小而变化的.如果设置一个最小的像素宽度,那么当变化到最小值之后,不会继续变小.在下面的例子中,会出现滚动条,保证元素的宽度: <body> <div style="height: 80px;width: 100%;background-color: blue;min-width: 800px;"

Python自动化开发学习17

jQuery学习之前 jQuery 是 JavaScript 的一个类库,类似 python 中的模块.jQuery在线手册:http://jquery.cuishifeng.cn/官网:http://jquery.com/ 版本选择 目前jQuery有三个大版本:1.x. 2.x. 3.x.教学推荐使用1.x的最新版本,这个版本兼容IE低版本.去官方页面:http://code.jquery.com/ ,可以获取到最新的版本,我这会用的是 jquery-1.12.4 . 添加jQuery 前面

Python自动化开发学习18-Django基础篇

自定义Web框架 跟着老师一点一点完善代码和文档结构,最终一个Web框架的雏形会显现出来,然后引出之后要学习完善的的Web框架. Web框架的本质 Web服务端的本质就是一个socket服务端,而我们的浏览器就是socket客户端.浏览器发送的请求就是一次socket请求.一次请求获得一次响应,然后就断开,这是一个短连接.下面是一个服务端的python代码,直接用socket,实现一个简单的Hello World: import socket def handle_request(conn):