19 模块之shelve xml haslib configparser
shelve
什么是shelve模块
也是一种序列化方式
使用方法
1.opne
2.读写
3.close
特点:使用方法比较简单 提供一个文件名字就可以开始读写
读写的方法和字典一致
你可以把它当成带有自动序列化功能的字典
原理: 内部使用的就是pickle 所以 也存在跨平台性差的问题 你自己存的只有你自己知道怎么取
什么时候用:写一个单机程序时可以考虑
import shelve
# 序列化
# sl = shelve.open("shelvetest.txt")
# sl["date"] = "8-13"
# sl["list1"] = ["123","456"]
# sl.close()
# 反序列化
s2 = shelve.open("shelvetest.txt")
print(s2.get("list1"))
s2.close()
xml
XML
什么XML:全称 可扩展标记语言
标记指的是代表某种含义的字符 XML<>
为什么需要XML
为能够在不同的平台间继续数据的交换
为了使交换的数据能让对方看懂 就需要按照一定的语法规范来书写
XML语法格式:
一、任何的起始标签都必须有一个结束标签。
<tagname></tagname>
<tagname></tagname>
<tagname/> 简化写法
二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<百度百科词条/>。XML解析器会将其翻译成<百度百科词条></百度百科词条>。
三、标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如这是一串百度百科中的样例字符串。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。
<tag1>
<tag2>
<tag3>
</tag3>
</tag2>
</tag1>
大白话 关闭标签应该从内往外 一层一层关闭 顺序不能乱
四、所有的特性都必须有值。
特性指的是属性
<person name="">
</person>
五、所有的特性都必须在值的周围加上双引号。
注意:最外层有且只有一个标签 这个标签称之为根标签
第一行应该有文档声明 用于高速计算机怎么理解
例如:<?xml version="1.0" encoding="utf-8"?>
当标签嵌套的时候会出现层级关系 如果一个标签不被任何别的标签包裹 那他就是根标签(最外层)
使用场景:
1.配置文件
2.常规的数据交换 例如从服务器获取一段新闻
与json的区别:
作用是一样的 都是一种数据格式
xml比json先诞生
json的数据比xml小
目前json是主流
python中的xml处理
使用到的模块
ElmentTree 表示整个文件的元素树
Elment 表示一个节点
属性
1.text 开始标签和结束标签中间的文本
2.attrib 所有的属性 字典类型
3.tag 标签的名字
方法
get 获取某个属性的值
1.解析XML
查找标签
find 在子标签中获取名字匹配第一个
findall 在子标签中获取名字匹配的所有标签
iter(tagname) 在全文中查找[匹配的所有标签 返回一个迭代器
2.生成XML
用ElmentTree
parse() 解析一个文件
getroot() 获取根标签
write() 写入到文件
3.修改xml
set 一个属性
remove 一个标签
append 一个标签
# 语法格式练习: 要求把你的同桌的手机信息用xml来描述
"""
import xml.etree.ElementTree as et
# 读取xml文档到内存中 得到一个包含所有数据的节点树
# 每一个标签就称之为一个节点 或 元素
# tree = et.parse("text.xml")
# # 获取根标签
# root = tree.getroot()
# # 获取所有的country 找的是第一个
# print(root.find("country"))
# # 找的是所有
# print(root.findall("country"))
#
# # 获取year
# print(root.iter("country"))
# for i in root.iter("country"):
# print(i)
#
#
# # 遍历整个xml
# for country in root:
# print(country.tag,country.attrib,country.text)
# for t in country:
# print(t.tag, t.attrib, t.text)
#
#
#
# print(root.find("country").get("name"))
# =============================================修改 第所有的country的year文本 改成加1
# 读取到内存
tree = et.parse("text.xml")
for country in tree.findall("country"):
# yeartag = country.find("year")
# yeartag.text = str(int(yeartag.text) + 1) 修改标签文本
# country.remove(country.find("year")) 删除标签
# 添加子标签
newtag = et.Element("newTag")
# 文本
newtag.text = "123"
#属性
newtag.attrib["name"] = "DSB"
#添加
country.append(newtag)
# 写回到内存
tree.write("text.xml",encoding="utf-8",xml_declaration=False)
生成XML
"""
用代码生成一个xml文档
"""
import xml.etree.ElementTree as et
# 创建根标签
root = et.Element("root")
# 创建节点树
t1 = et.ElementTree(root)
# 加一个peron标签
persson = et.Element("person")
persson.attrib["name"] = "yyh"
persson.attrib["sex"] = "man"
persson.attrib["age"] = "20"
persson.text = "这是一个person标签"
root.append(persson)
# 写入文件
t1.write("newXML.xml",encoding="utf-8",xml_declaration=True)
hashlib
hashlib
hash是什么?
是一种算法
用于将任意长度的数据,压缩映射到一段固定长度的字符 (提取特征)
hash的特点:
1.输入数据不同,得到的hash值有可能相同
2.不能通过hash值来得到输入的值
3.如果算法相同,无论输入的数据长度是多少,得到的hash值长度相同
因为以上特点常将hash算法用于加密和文件校验
输入用户名和密码 在代码中与数据库中的判断是否相同
思考当你的数据需要在网络中传递时 就可能会受到网络攻击
黑客通过抓包工具就能截获你发送和接收的数据
所以你的数据 如果涉及到隐私 就应该先加密在发送
加密的方式有很多
常用的MD5就是一种hash算法
常用的提升安全性的手段 就是加盐
就是把你加密前的数据做一些改动 例如 把顺序反过来
library
"""
import hashlib
md = hashlib.md5()
md.update("hello你这么牛逼吗 你破解我试试? DSB".encode("utf-8"))
print(md.hexdigest())
# 破解MD5可以尝试撞库 原理: 有一个数据库 里面存放了常见的明文和密文的对应关系 ,
# 所以我可以拿着一个密文取数据库中查找 有没有已经存在的明文 如果有撞库成功 能不能破解凭运气
# 假设我已经拿到了一个众多账号中的一个密码 我可以那这个密码 挨个测试你的所有账号 可能不能碰到运气
pwd_dic = {"123456":"e10adc3949ba59abbe56e057f20f883e","hello":"5d41402abc4b2a76b9719d911017c592"}
for i in pwd_dic:
if pwd_dic[i] == "5d41402abc4b2a76b9719d911017c592":
print(i)
''
# 今后我们在写一些需要网络传输的程序时 如果要进行加密 最好把加密的算法搞得更复杂
# 密码长度为6位
# abcdef
# 在前面加一个 abc 在后面加一个 cba 完事以后在加密
pwd = "abcdef"
# pwd = "abc"+pwd+"cba"
md2 = hashlib.md5()
md2.update("121".encode("utf-8"))
md2.update(pwd.encode("utf-8"))
md2.update("akjasjkasa".encode("utf-8"))
print(md2.hexdigest())
# 加密实际上能做的就是让黑客的的破解成本大于他的利润
#
# sha = hashlib.sha512()
# sha.update("abcd".encode("utf-8"))
# print(len(sha.hexdigest()))
#
import hmac
h = hmac.new("121212".encode("utf-8"))
h.update("abcd".encode("utf-8"))
print(h.hexdigest())
configparser
configparser 是什么? 配置文件解析模块
什么是配置文件?
用于提供程序运行所需要的一些信息的文件 后缀 ini cfg
有什么用?
方便用户修改 例如超时时间
配置文件内容格式
只包括两种元素
section 分区
option 选项
一个文件可以有多个section
一个section可以有多个选项
核心功能
1.sections 获取所有分区
2.options 获取所有选项
3.get 获取一个值 传入 section option
注意:大小写不敏感
"""
# 假装做一个下载功能 最大链接速度可以由用户来控制 用户不会看代码 所以提供一个配置文件
import configparser
# 得到配置文件对象
cfg = configparser.ConfigParser()
# 读取一个配置文件
cfg.read("download.ini")
print(cfg.sections())
print(cfg.options("section1"))
print(type(cfg.get("section1","maxspeed")))
print(type(cfg.getint("section1","maxspeed")))
print(cfg.getint("section2","minspeed"))
# 修改最大速度为2048
cfg.set("section1","maxspeed","2048")
cfg.write(open("download.ini","w",encoding="utf-8"))
19 模块之shelve xml haslib configparser的更多相关文章
- python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re正则表达式)
1.tiim模块,因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ print("time".ce ...
- python模块之shelve,xml,hashlib,configpaser
shelve shelve模块也是一种可以将数据序列化的模块 使用方法 1. open 2. 读写 3. close 特点:使用方法比较简单 提供一个文件名字就可以开始读写,读写的方法和字典一致;跨平 ...
- python常用模块:pickle、shelve、json、xml、configparser
今日内容主要有: 一.pickle模块二.shelve模块三.json模块四.json练习五.xml模块 六.xml练习七.configparser模块 一.pickle模块 #pickle是一个用来 ...
- Learning-Python【20】:Python常用模块(3)—— shelve、pickle、json、xml、configparser
什么是序列化/反序列化? 序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输,反序列化就是硬盘中或者网络中传来的一种数据格式转换成内存中数据结构 为什么要有序列化/反序列化? 1 ...
- 常用模块之 shutil,json,pickle,shelve,xml,configparser
shutil 高级的文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 import shutil shut ...
- 模块 - json/pickle/shelve/xml/configparser
序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 为什么要序列化: 有种办法可以直接把内存数据(eg:10个列表,3 ...
- Python模块 shelve xml configparser hashlib
常用模块1. shelve 一个字典对象模块 自动序列化2.xml 是一个文件格式 写配置文件或数据交换 <a name="hades">123</a>3. ...
- 常用内置模块(二)--logging、hashlib、shelve、xml、configparser
一.logging模块 1.logging作用 1. 控制日志级别 2. 控制日志格式 3. 控制输出的目标为文件 2.日志级别 1 logging.debug( 2 logging.info( ...
- Python学习笔记——基础篇【第六周】——json & pickle & shelve & xml处理模块
json & pickle 模块(序列化) json和pickle都是序列化内存数据到文件 json和pickle的区别是: json是所有语言通用的,但是只能序列化最基本的数据类型(字符串. ...
随机推荐
- Django1.0和2.0中的rest_framework的序列化组件之超链接字段的处理
大家看到这个标题是不是有点懵逼,其实我就是想要一个这样的效果 比如我get一条书籍的数据,在一对多的字段中我们显示一个url,看起来是不是很绚! 下面我们就来实现这么一个东西 首先我们一对多字段中的一 ...
- java常量类编译问题
常量类编译后并不在.class文件中呈现,取而代之的是各个具体的常量.例如: 编译前:(Constant.OPTIONSRADIO常量值为1) 编译后: 应用场景 1,项目编译后发布项目前可以删除常量 ...
- java NIO buffer --directBuffer (2)
HeapBuffer ----堆缓冲 :其实是在java 的内存模型中,java 虚拟机可以直接管控的 DirectBuffer ---直接缓冲 :使用的是native ,与操作系统挂钩,调用的 ...
- jdk与eclipse位数不一致出现的问题
今天运行eclipse时出现了如下问题: 后来去网上查了一下,如果jdk版本的位数和eclipse安装版本所需要的版本位数不相同,就会出现如图所示的问题,导致eclipse打不开. 1.查询jdk版本 ...
- cgi,fast-cgi,php-cgi,php-fpm转载详解
转载自:https://segmentfault.com/q/1010000000256516 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编 ...
- 在Eclipse中安装python插件的方法
一个博士给了我一堆代码,原本以为是C++或者java写的,结果是python,我压根没学过呀,不过本着语言都是相通的原则,我硬着头皮开始学习Python,当然先学习安装IDE(以前学习一门新语言,我会 ...
- WEB框架Django之ORM操作
一 ORM的简介 MVC或者MVC框架中包括的一个重要部分就是ORM,它实现了数据模型与数据库的解耦. 即数据模型的设计不需要依赖于特定的数据库,通过简单的配置可以轻松更换数据库,这可以大大减少开发人 ...
- Excel怎么下拉框多选
打开Exlce, 确定,然后 右击查看代码,把这段代码复制到新建的文件里面 此时Excel会给出提示,选择否,,系统会提示保存,在保存的时候选择启用宏的工作簿然后保存,此时Excel下拉框多选就搞定了 ...
- mysql修改表引擎Engine
修改my.ini,在[mysqld]下加上default-storage-engine=INNODB 其中红色字体部分是要指定的引擎名称.用sql语句修改已经建成表的引擎:alter table ta ...
- Oracle性能优化4-索引
Oracle优化可以分为通过改写sql优化和不改写sql优化不改写sql优化一般通过index来实现 在Oracle数据库中,索引按照索引机制的不同,可以分为三种. 1. B-Tree索引 B-Tre ...