pickel模块

import pickle
#pickle可以将任何数据类型序列化,json只能列表字典字符串数字等简单的数据类型,复杂的不可以
#但是pickle只能在python中使用,json可以支持多个语言

pickle模块用于将内存中的python对象序列化成字节流,并可以写入任何类似文件对象中;它也可以根据序列化的字节流进行反序列化,将字节流还原为内存中的对象。

pickle使用dump方法将内存对象序列化:

import pickle

li = list(range(1,3))
dbfile = open('pickle_list', 'wb') #必须以2进制打开文件,否则pickle无法将对象序列化只文件
pickle.dump(li, dbfile)
dbfile.close()

以上代码即将list对象li序列化至文件“pickle_list"中,下次再次运行时,可以通过pickle的load方法恢复list对象:

    import pickle

    dbfile = open('pickle_list', 'rb')
li = pickle.load(dbfile)
dbfile.close()

实例

#文件1,加入个人信息

    dict_count = {
1000:{"name":"alex li",
"email":"lijie3721@126.com",
"password":"abc123",
"balance":15000,
"phone":13651054608,
"bank_acc":{
"ICBC":76813516846516515,
"CBC":57456165196516154,
"ABC":54616515615654151
}
}, 1001: {"name": "caixin guo",
"email": "caixin3721@126.com",
"password": "abc123",
"balance": -15000,
"phone": 12221054608,
"bank_acc": {
"ICBC": 76454525426516515
}
}
} f = open("couent_D","wb")
# f.write(bytes(dict_count))
# print(bytes(dict_count))#bytes无法把字典转成字节
print(pickle.dumps(dict_count))#用这个命令转成字节
f.write(pickle.dumps(dict_count))
f.close()

#文件2,对个人信息进行修改

    account_file = open("couent_D","rb")
account_f = pickle.loads(account_file.read())#读取
account_f[1000]["balance"] -=500
print(account_f)
account_file.close() file = open("count_D","wb")
file.write(pickle.dumps(account_f))#另一种写法pickle.dump(account_f,file)
file.close()

#文件3,读取修改后的信息

    coont = open("count_D","rb")
accen = pickle.loads(coont.read())#另一写法accen=pickle.load(coont)
print(accen)
coont.close()

另一个序列化模块

json模块
序列化 字典转字符串
反序列化 字符串转字典

re模块

import re

re.match()

  #从头匹配
  #最开始哪个字符(或字符串)开始匹配上后面的全部忽略
  #简单
  #分组

#无分组

import re
origin = "hello alex bcd alex lge alex acd 19"
r = re.match("h\w+",origin)
print(r.group())#获取匹配到的所有结果
print(r.groups())#获取模型中匹配到的分组结果
print(r.groupdict())#获取模型中匹配到的分组结果

结果
hello
()
{}

#分组
分组的用处:从已经匹配到的字符串里在获取其中的某个字符

import re
origin = "hello alex bcd alex lge alex acd 19"
r = re.match("h(\w+)",origin)
print(r.group())#获取匹配到的所有结果
print(r.groups())#获取模型中匹配到的分组结果(括号(组)里的内容)
print(r.groupdict())#获取模型中匹配到的分组结果

结果:
hello
('ello',)
{}

#有组(括号)只有groups可以匹配到,有key只有gruopdict可以匹配到

        r = re.match("(h)\w+",origin)
print(r.groups())#获取模型中匹配到的分组结果

结果:('h',)

r = re.match("?P<n1>h(\w+)",origin)#?P<x> x为key字典类型
print(r.groupdict())#获取模型中匹配到的分组结果
r = re.match("?P<n1>h(?P<n2>\w+)",origin)#key ?P<> 的值为后面的字符串
print(r.groupdict())#获取模型中匹配到的分组结果

#结果:
{'n1': 'h'}
{'n1': 'h', 'n2': 'ello'}

#MULTINE多行匹配,DOTALL.可以匹配换行符,VERBOSE忽略空白和注释,以获得更好的外观。
IGNORECASE执行不区分大小写的匹配。
match(pattern模型,string字符串,flags模式)

re.search()

#浏览全部字符串,匹配第一个符合规则的字符串
#和match用法差不多,search只不过这个全部浏览,一个一个字符的匹配

        origin = "hello alex bcd alex lge alex acd 19"
r = re.search("a\w+", origin)
print(r.group()) # 获取匹配到的所有结果
print(r.groups()) # 获取模型中匹配到的分组结果
print(r.groupdict()) # 获取模型中匹配到的分组结果

结果:
alex
()
{}

        origin = "hello alex bcd alex lge alex acd 19"
r = re.search("a(\w+).*(?P<name>\d)$", origin)
print(r.group()) # 获取匹配到的所有结果 #上下两个也相同
print(r.groups()) # 获取模型中匹配到的分组结果#显示组的结果,忽略掉自己不匹配的比如?P<name>
print(r.groupdict()) # 获取模型中匹配到的分组结果

结果:
alex bcd alex lge alex acd 19
('lex', '9')
{'name': '9'}

        import re
origin = "hello alex bcd alex lge alex acd 19"
n = re.search("(a)(\w+)",origin)
print(n.group())
print(n.groups())

结果:
alex
('a', 'lex')

re.findall()

#将匹配到的所有的 内容放置在列表中

        import re
re.findall("\d+\w\d+","a2b3c4d5")
#匹配时是逐个匹配,匹配到之后,下一轮匹配时就从他的后面开始匹配

结果:['2b3', '4d5']

findall特别

print(re.findall("","asdfasdf"))

结果:
['', '', '', '', '', '', '', '', '']

当元素处理时,有几个括号就有几个组,就要分几个,如果第一个匹配了,第二个,没有匹配但是第二个可有可无,但是在第二个的位置上第三个匹配了,就会生成三个,其中一个留给没有匹配的,留的那个为空

        import re
origin = "hello alex bcd alex lge alex acd 19"
print(re.findall("a\w+",origin))
print(re.findall("(a\w+)",origin))
print(re.findall("a(\w+)",origin))
#加括号以后,就行当于把按照规则匹配后,把括号里的输出,不在括号里的就不输出

结果:
['alex', 'alex', 'alex', 'acd']
['alex', 'alex', 'alex', 'acd']
['lex', 'lex', 'lex', 'cd']

        origin = "hello alex bcd alex lge alex acd 19"
n = re.search("(a)(\w+)", origin)
print(re.findall("(a)(\w+)",origin))#在规则都匹配过一次时,先把这些放在一个括号里,之后一次匹配放在一个括号里,再匹配再放
print(n.groups()) #结果第一个
结果:
[('a', 'lex'), ('a', 'lex'), ('a', 'lex'), ('a', 'cd')]
('a', 'lex')

origin = "hello alex bcd alex lge alex acd 19"

print(re.findall("(a)(\w+(e))(x)",origin))

结果:#先找到a放进组里,再找到le放进组里,再从le里找到e放进组里,在找到x放进组里
[('a', 'le', 'e', 'x'), ('a', 'le', 'e', 'x'), ('a', 'le', 'e', 'x')]
#括号的意思是从提取到的内容里再次提取内容,有几个括号提取几次

例子:

origin = "hello alex bcd alex lge alex acd 19"
print(re.findall("(a)((\w+)(e))(x)",origin))

结果

[('a', 'le', 'l', 'e', 'x'), ('a', 'le', 'l', 'e', 'x'), ('a', 'le', 'l', 'e', 'x')]

  import re
a = "alex"
n = re.findall("(\w){4}",a)#理论上它输出了四次,但是它只有一个括号,所以取一个,而且默认去最后一个
n1 = re.findall("(\w)(\w)(\w)(\w)",a)
n3 = re.findall("(\w)*",a)详解199 24
print(n)
print(n1)
print(n3)

结果
['x']
[('a', 'l', 'e', 'x')]
['x', '']
#findall其实就是search的groups组合而来
#当加有*时,前面那个可有可无所以当匹配不到或匹配到最后时,会以空的再匹配一次????

    import re
n = re.findall("(\dasd)*","1asd2asdp3asd98kif")
print(n)

#结果 #那么多空,因为贪婪匹配 #连续两次匹配到就去后面那个,带括号情况下
['2asd', '', '3asd', '', '', '', '', '', '']

re.finditer()

#迭代的

        origin = "hello alex bcd alex lge alex acd 19"
r = re.finditer("(a)((\w+)(e))(?P<n1>x)",origin)
print(r)
for i in r:
print(i,i.group(),i.groups(),i.groupdict())

结果:
<callable_iterator object at 0x0000000687374C50>
<_sre.SRE_Match object; span=(6, 10), match='alex'> alex ('a', 'le', 'l', 'e', 'x') {'n1': 'x'}
<_sre.SRE_Match object; span=(15, 19), match='alex'> alex ('a', 'le', 'l', 'e', 'x') {'n1': 'x'}
<_sre.SRE_Match object; span=(24, 28), match='alex'> alex ('a', 'le', 'l', 'e', 'x') {'n1': 'x'}

re.split()

#分割

        import re
origin = "hello alex bcd alex lge alex acd 19"
ddd = "hello alex bcd alex ddaf lge alex acd 19"
n = re.split("a\w+",origin,1)#1为分割次数
n1 = re.split("a\w+",ddd)
print(n)
print(n1)

结果
['hello ', ' bcd ', ' lge ', ' ', ' 19']
['hello ', ' bcd ', ' dd', ' lge ', ' ', ' 19']

origin = "hello alex bcd alex lge alex acd 19"
n = re.split("a(\w+)", origin, )
print(n)

结果 #因为被分割了,所以n有三个部分,就像下面,n[1]第一部分 n[2]第二部分 n[3]第三部分
['hello ', 'lex', ' bcd alex lge alex acd 19']

#中括号里面的字符无需转意,但是正则表达式里的括号有特殊意义,
所以正常情况下需要转意

origin = "jhasdjas4dg564jskdbf5s41g56asg"
str_n = re.sub("\d+","KKK",origin,5)
print(str_n)

结果
jhasdjasKKKdgKKKjskdbf5s41g56asg

subn() #subn返回两个元素

origin = "jhasdjas4dg564jskdbf5s41g56asg"
new_str,count = re.subn("\d+","KKK",origin)
print(new_str,count)

结果: #5为匹配个数
jhasdjasKKKdgKKKjskdbfKKKsKKKgKKKasg 5

python -pickle模块、re模块学习的更多相关文章

  1. python pickle 和 shelve模块

    pickle和shelve模块都可以把python对象存储到文件中,下面来看看它们的用法吧 1.pickle 写: 以写方式打开一个文件描述符,调用pickle.dump把对象写进去 dn = {'b ...

  2. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

  3. python 序列化及其相关模块(json,pickle,shelve,xml)详解

    什么是序列化对象? 我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization ,marshalling ,flatter ...

  4. python的pickle和shelve模块

    python中用于序列化的模块总结 目录 pickle模块 shelve模块 xml模块 pickle模块 介绍 Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python, ...

  5. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  6. python序列化及其相关模块(json,pickle,shelve,xml)详解

    什么是序列化对象? 我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization ,marshalling ,flatter ...

  7. Python全栈--7模块--random os sys time datetime hashlib pickle json requests xml

    模块分为三种: 自定义模块 内置模块 开源模块 一.安装第三方模块 # python 安装第三方模块 # 加入环境变量 : 右键计算机---属性---高级设置---环境变量---path--分号+py ...

  8. Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式

    Python第十四天 序列化  pickle模块  cPickle模块  JSON模块  API的两种格式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Py ...

  9. python 常用模块(一): os模块,序列化模块(json模块 pickle模块 )

    1.os模块 2.序列化模块:(1)json模块 和 pickle模块 一.os模块 os.path.abspath: (1)把路径中不符合规范的/改成操作系统默认的格式 import os path ...

随机推荐

  1. selendroid之toast处理

    最近发现原来处理toast的操作失效了.仔细看了下原来的API.决定用switchTo来解决.driver.switchTo().defaultContent().findElement(By.id( ...

  2. python 之 BeautifulSoup标签查找与信息提取

    一. 查找a标签 (1)查找所有a标签 >>> for x in soup.find_all('a'): print(x) <a class="sister" ...

  3. SQLite的.NET应用自适应32位/64位系统 z

    如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.D ...

  4. cropperjs的高度过大(container height too much)

    cropperjs的高度过大(container height too much) 标签(空格分隔): JavaScript 业务需要web头像裁切,用canvas写了个demo卡成一匹马,于是就去寻 ...

  5. centos6.5升级python2.7

    请看我的有道云笔记链接: http://note.youdao.com/noteshare?id=777179c98876147537288489e963b7db&sub=71D56E2269 ...

  6. LAB2 软件测试 Selenium上机实验 2017

    1.安装SeleniumIDE插件 打开Firefox——>菜单栏——>附加组件——>获取附加组件——>查看更多附加组件——>搜索框输入SeleniumIDE并查找——& ...

  7. WP模拟器修改语言为中文方法

    对于WP7模拟器来说默认启动时显示的语言为英文,除了操作界面外,如果你的应用支持多国语言必须修改为中文才能显示正确的界面.下面Zune123将WP7 Emulator修改语言为中文的方法写个简单的教程 ...

  8. C语言 变量类型

    // a是一个全局变量,静态变量 int a; void test() { // b是一个局部变量,自动变量 ; b++; // c是一个局部变量,静态变量 ; c++; printf("b ...

  9. python:协程

    1,如何实现在两个函数之间的切换? def func1(): print(l) yield print(3) yield def func2(): g =func1() next(g) print(2 ...

  10. LA 4670 AC自动机

    题意:给一个字典,看这个字典中匹配最多次数的是哪个单词(可以有多个). 分析: AC自动机就是用来解决多模式匹配问题的工具. 模板用的lrj的,相比HDU 2222,动态开辟字典树.用last数组统计 ...