json模块

json模块: 是一个序列化模块。
  json:
    是一个 “第三方” 的特殊数据格式。

    可以将python数据类型 ----》 json数据格式 ----》 字符串 ----》 文件中

    其他语言要想使用python的数据:
      文件中 ----》 字符串 ----》 json数据格式 ----》 其他语言的数据类型。

    注意: 在json中,所有的字符串都是双引号

    # 元组比较特殊:
    python中的元组,若将其转换成json数据,内部会将元组 ---> 列表

    # set是不能转换成json数据

为什么要使用json:
  - 为了让不同的语言之间数据可以共享。

  PS: 由于各种语言的数据类型不一,但长相可以一样,
  比如python不能直接使用其他语言的数据类型,
  必须将其他语言的数据类型转换成json数据格式,
  python获取到json数据后可以将json转换成pyton的数据类型。

如何使用:
  import json

  - json.dumps:
  json.dumps(), f = open() --> f.write()
    # 序列化: python数据类型 ---》 json ---》 字符串 ---》 json文件中

  - json.loads:
    f = open(), str = f.read(), json.loads(str)
      # 反序列化: json文件中 --》 字符串 ---》 json ---》 python或其他语言数据类型

  - json.dump(): # 序列化: python数据类型 ---》 json ---》 字符串 ---》 json文件中
    - 内部实现 f.write()

  - json.load(): # 反序列化: json文件中 --》 字符串 ---》 json ---》 python或其他语言数据类型
    - 内部实现 f.read()

  - dump, load: 使用更方便

注意: 保存json数据时,用.json作为文件的后缀名

# 列表
import json
# list1 = ['123', '321']
list1 = ['张全蛋', '李小花']
# dumps: 将python数据 ---》 json数据格式 ---》 字符串
# ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据 默认ascii,本质上是中文字符转化为unicode编码
json_str = json.dumps(list1, ensure_ascii=False)
print(json_str)
print(type(json_str)) # str # json.loads()字符串 ----> json数据格式 ---》将python数据
python_data = json.loads(json_str)
print(python_data)
print(type(python_data)) # list
--------------------------------------
# 元组
tuple1 = ('张全蛋', '李小花')
# dumps: 将python数据 ---》 json数据格式 ---》 字符串
# ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据
json_str = json.dumps(tuple1, ensure_ascii=False)
print(json_str)
print(type(json_str)) # str # json.loads()字符串 ----> json数据格式 ---》将python数据
python_data = json.loads(json_str)
print(tuple(python_data))
print(type(tuple(python_data))) # list
--------------------------------------
# 字典
dic = {
'name': 'tank',
'age': 17
} # dumps: 将python数据 ---》 json数据格式 ---》 字符串
# ensure_ascii将默认的ascii取消设置为False,可以在控制台看到中文,否则看到的是bytes类型数据
json_str = json.dumps(dic, ensure_ascii=False)
print(json_str)
print(type(json_str)) # str # json.loads()字符串 ----> json数据格式 ---》将python数据
python_data = json.loads(json_str)
print(python_data)
print(type(python_data)) # dict

注册功能

# 注册功能:
def register():
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
re_password = input('请确认密码:').strip()
if password == re_password:
# [username, password]
# {'name': username, 'pwd': password}
user_dic = {
'name': username, 'pwd': password
}
json_str = json.dumps(user_dic, ensure_ascii=False)
# 开始写入文件中
# 注意: 保存json数据时,用.json作为文件的后缀名
with open('user.json', 'w', encoding='utf-8') as f:
f.write(json_str) register()

dump,load方法可省略f.write(),f.read()步骤

# dump, load
import json
user_dic = {
'username': 'tank',
'password': 123
}
f = open('user2.json', 'w', encoding='utf-8')
json.dump(user_dic, f,ensure_ascii=False)
f.close() with open('user3.json', 'w', encoding='utf-8') as f:
json.dump(user_dic, f) with open('user3.json', 'r', encoding='utf-8') as f:
user_dic = json.load(f)
print(user_dic)
print(type(user_dic))

pickle模块:

  pickle是一个python自带的序列化模块。

  优点:
    - 可以支持python中所有的数据类型
    - 可以直接存 "bytes类型" 的数据,pickle存取速度更快

  缺点: (致命的缺点)
    - 只能支持python去使用,不能跨平台

import pickle
set1 = {
'tank', 'sean', 'jason', '大脸'
}
new_str= pickle.dumps(set1)
print(new_str) # 打印为二进制结果
'''打印结果
b'\x80\x03cbuiltins\nset\nq\x00]q\x01(X\x04\x00\x00\x00tankq\x02X\x06\x00\x00\x00\xe5\xa4\xa7\xe8\x84
\xb8q\x03X\x05\x00\x00\x00jasonq\x04X\x04\x00\x00\x00seanq\x05e\x85q\x06Rq\x07.'
'''
# 写 dump
with open('teache.pickle','wb')as f: # 必须为二进制读写
pickle.dump(set1,f) # 读 load
with open('teache.pickle','rb')as f:
python_set=pickle.load(f)
print(python_set)
print(type(python_set))

- python默认八大数据:
  - 整型
  - 浮点型
  - 字符串
  - 字典
  - 元组
  - 列表
  - 集合
  - 布尔
collections模块:
  - 提供一些python八大数据类型 “以外的数据类型” 。

  - 具名元组:
    具名元组 只是一个名字。
    应用场景:
      - 坐标

    from collections import namedtuple

  - 有序字典:
    - python中字典默认是无序

    - collections中提供了有序的字典

    from collections import OrderedDict

# 具名元组
from collections import namedtuple # 传入可迭代对象是有序的
# 应用:坐标
# 将'坐标'变成 “对象” 的名字
point = namedtuple('坐标', ['x', 'y']) # 第二个参数既可以传可迭代对象
point = namedtuple('坐标', ('x', 'y')) # 第二个参数既可以传可迭代对象
point = namedtuple('坐标', 'x y') # 第二个参数既可以传可迭代对象
#
# # 会将 1 ---> x, 2 ---> y
# 传参的个数,要与namedtuple第二个参数的个数一一对应
p = point(1, 3) # 本质上传了4个,面向对象讲解
print(p) # 坐标(x=1, y=3)
print(type(p)) # <class '__main__.坐标'> # 扑克牌:
# 获取扑克牌对象
card = namedtuple('扑克牌', ['color', 'number'])
#
# # 由扑克牌对象产生一张 扑克牌
red_A = card('♥', 'A') # 扑克牌(color='♥', number='A')
print(red_A)
black_K = card('♠', 'K') # 扑克牌(color='♠', number='K')
print(black_K) # 演员的信息
p = namedtuple('dao国', 'city movie_type name')
jason_and_dabing = p('大阪', 'action', 'C老师')
print(jason_and_dabing)
# dao国(city='大阪', movie_type='action', name='C老师')
# 有序字典
# python默认无序字典
dic = dict({'x': 1, 'y': 2, 'z': 3})
print(dic)
print(type(dic))
for line in dic:
print(line) from collections import OrderedDict
# 有序字典
order_dict = OrderedDict({'x': 1, 'y': 2, 'z': 3})
print(order_dict, '打印有序的字典')
print(type(order_dict))
print(order_dict.get('y'))
print(order_dict['y']) for line in order_dict:
print(line)

openpyxl模块

  - 可以对Excle表格进行操作的模块

  - 下载:
    pip3 install openpyxl

  - Excel版本:
    2003之前:
      excle名字.xls

    2003以后:
      excle名字.xlsx

  - 清华源: https://pypi.tuna.tsinghua.edu.cn/simple

  - 配置永久第三方源:
    D:\Python36\Lib\site-packages\pip\_internal\models\index.py

# 写入数据
from openpyxl import Workbook
# 获取Excel文件对象
wb_obj = Workbook() wb1 = wb_obj.create_sheet('python13期工作表1', 1)
wb2 = wb_obj.create_sheet('python13期工作表2', 2) # 修改工作表名字: 为python13期工作表1标题修改名字 ---》 tank大宝贝
print(wb1.title)
wb1.title = 'tank大宝贝'
print(wb1.title) # 为第一张工作表添加值
wb1['工作簿中的表格位置']
wb1['A10'] = 200
wb1['B10'] = 1000
wb1['C10'] = '=SUM(A10:B10)' wb2['A1'] = 100 # 生成Excel表格
wb_obj.save('python13期.xlsx')
print('excel表格生成成功') # 读取数据
from openpyxl import load_workbook
wb_obj = load_workbook('python13期.xlsx')
wb3=wb_obj.creat_sheet('python13期工作表3',3)
# print(wb3.title)
# wb3.title='tank小宝贝' #修改会再创建一个tank小宝贝的sheet,存在问题
# print(wb3.title)
print(wb_obj) # wb_obj['表名'] wb1 = wb_obj['tank大宝贝']
print(wb1['A10'].value)
wb1['A10'] = 20
print(wb1['A10'].value)
wb_obj.save('python13期.xlsx') # 加这一步才会保存
# 批量写入100条数据
from openpyxl import Workbook wb_obj = Workbook() wb1 = wb_obj.create_sheet('工作表1') # wb1['表格位置'] = 对应的值
n = 1
for line in range(100):
wb1['A%s' % n] = line + 1
n += 1 wb_obj.save('批量插入的数据2.xlsx')
dict1 = {
'name': 'tank',
'age': 17
}
n=1
for key,value in dict1.items():
wb1['A%s'%n]=key
wb1['B%s' % n] = value
n+=1
wb_obj.save('批量插入的数据2.xlsx')

python基础语法12 内置模块 json,pickle,collections,openpyxl模块的更多相关文章

  1. python基础语法13 内置模块 subprocess,re模块,logging日志记录模块,防止导入模块时自动执行测试功能,包的理论

    subprocess模块: - 可以通过python代码给操作系统终端发送命令, 并且可以返回结果. sub: 子    process: 进程 import subprocess while Tru ...

  2. python基础语法11 内置模块time,datatime,random,os,sys,hashlib模块

    time模块 在python的三种时间表现形式: 1.时间戳: 给电脑看的. - 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒. 2.格式化时间(Format Strin ...

  3. Python 基础语法(三)

    Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)------------------------- ...

  4. Python基础语法题库

    引言: 语法练习包括Python基础语法.数据类型.字符编码和简单文件操作等内容. 正文(参考答案附录在题目下方): 1.Python 里用来告知解释器跳过当前循环中的剩余语句,然后继续进行下一轮循环 ...

  5. Python 基础语法(四)

    Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...

  6. Python 基础语法

    Python 基础语法 Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 第一个Python程序 E:\Python>python Python 3.3.5 ...

  7. python学习第四讲,python基础语法之判断语句,循环语句

    目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...

  8. python基础语法、数据结构、字符编码、文件处理 练习题

    考试范围 '''1.python入门:编程语言相关概念2.python基础语法:变量.运算符.流程控制3.数据结构:数字.字符串.列表.元组.字典.集合4.字符编码5.文件处理''' 考试内容 1.简 ...

  9. python基础语法及知识点总结

    本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...

随机推荐

  1. JS 中判断数据类型是否为 null、undefined 或 NaN

    判断 undefined var aaa = undefined; console.log(typeof(aaa) === "undefined"); // true 判断 nul ...

  2. python 基础 -- python 模块

    ---------    python  模块 一个文件就是一个模块 作用: 模块可以定义函数.类和变量     模块里也能包含可执行的代码 引用模块的写法: import 模块名 from 模块名 ...

  3. python模块、异常

    1. python 模块 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用 python 标准库的方法.(有点像java的c ...

  4. 消除VS中动态申请二维数组C6011,C6385,C6386的警告

    动态申请二维数组,无非就是通过指针来实现.@wowpH 过程分三步:1.申请内存,2.使用数组,3.释放内存. 代码如下: /************************************* ...

  5. 【转】AXI_Lite 总线详解

    目录: · 1.前言 · 2.AXI总线与ZYNQ的关系 · 3 AXI 总线和 AXI 接口以及 AXI 协议 · 3.1 AXI 总线概述 · 3.2 AXI 接口介绍 ·3.3 AXI 协议概述 ...

  6. Codeforces 878 E. Numbers on the blackboard

    Codeforces 878 E. Numbers on the blackboard 解题思路 有一种最优策略是每次选择最后面一个大于等于 \(0\) 的元素进行合并,这样做完以后相当于给这个元素乘 ...

  7. java中什么是包

    一.什么是包 包允许将类组合成较小的单元(类似文件夹),使其易于找到和使用相应的类文件 包有助于避免命名冲突.在使用许多类时,类和方法的名称很难决定.有时需要使用与其他类相同的名称.包基本上隐藏了类并 ...

  8. K8S学习笔记之Kubernetes 配置管理 ConfigMap

    0x00 概述 很多情况下我们为某一应用做好镜像,当我们想修改其中的一些参数的时候,就变得比较麻烦,又要重新制作镜像,我们是不是有一种方式,让镜像根据不同的场景调用我们不同的配置文件呢,那我们就需要用 ...

  9. VS代码调试出现:当前不会命中断点。还没有为该文档加载任何符号。

    第一步:一定要检查最顶部自己设置的是 Release模式还是Debug模式!!!下面这个图就是在我搜了好多解决方式之后,突然发现自己开的是Release模式!!!吐血. 第二步:如果你已经确定了自己是 ...

  10. echarts自定义悬浮框的显示

    最近在使用echarts的地图功能 ,业务需求是显示前五的具体信息,并且轮流显示,首先解决轮流显示的问题 var counta = 0; //播放所在下标 var mTime = setInterva ...