一 sys
import sys
sys.argv #命令行参数List,第一个元素是程序本身路径 sys.exit(n) # 退出程序,正常退出时exit(0) sys.version # 获取Python解释程序的版本信息 sys.maxint # 最大的Int值 sys.path # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform # 返回操作系统平台名称 sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]
二 json pickle
json的主要作用是把数据序列化
用于序列化的两个模块
json,用于字符串 和 python数据类型间进行转换
pickle(支持所有的python格式),用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
三. shelve模块
对pickle更上一层的封装
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
import
shelve
d
=
shelve.
open
(
'shelve_test'
)
#打开一个文件
t
=
Test(
123
)
t2
=
Test(
123334
)
name
=
[
"alex"
,
"rain"
,
"test"
]
d[
"test"
]
=
name
#持久化列表
d[
"t1"
]
=
t
#持久化类
d[
"t2"
]
=
t2
d.close()
|
四 PyYSML
Python也可以很容易的处理ymal文档格式,只不过需要安装一个模块,参考文档:http://pyyaml.org/wiki/PyYAMLDocumentation
五
configparser
__author__ = "Alex Li" import configparser #ConfigParser config = configparser.ConfigParser() config["DEFAULT"] = {'ServerAliveInterval': '45', 'Compression': 'yes', 'CompressionLevel': '9'} config['bitbucket.org'] = {} config['bitbucket.org']['User'] = 'hg' config['topsecret.server.com'] = {} config['topsecret.server.com'] config['topsecret.server.com']['Host Port'] = '50022' # mutates the parser config['topsecret.server.com']['ForwardX11'] = 'no' # same here config['DEFAULT']['ForwardX11'] = 'yes' with open('example.ini', 'w') as configfile: config.write(configfile)
读
__author__ = "Alex Li" import configparser
conf = configparser.ConfigParser()
conf.read("example.ini")
print(conf.defaults())
print(conf['bitbucket.org']['user'])
#print(conf.sections()) sec = conf.remove_section('bitbucket.org')
conf.write(open('example.ini', "w"))
六;hashlib
import hashlib
# m = hashlib.md5()#md5不能反解 # m.update(b"Hello") # print(m.hexdigest())#以十六进制 # m.update(b"It's me") # print(m.hexdigest()) # m.update(b"It's been a long time since we spoken...") # m2 = hashlib.md5()
m2.update("HelloIt's me天王盖地虎".encode(encoding="utf-8"))
print(m2.hexdigest())
s2 = hashlib.sha512()
s2.update(b"HelloIt's me")
print(s2.hexdigest())
觉得不够厉害 还有更吊的
import hmac
h = hmac.new(b"12345","you are 250你是".encode(encoding="utf-8"))
print(h.digest())#十进制加密
print(h.hexdigest())#十六进制加密
七 re
'.'
默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
'^'
匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r
"^a"
,
"\nabc\neee"
,flags
=
re.MULTILINE)
'$'
匹配字符结尾,或e.search(
"foo$"
,
"bfoo\nsdfsf"
,flags
=
re.MULTILINE).group()也可以
'*'
匹配
*
号前的字符
0
次或多次,re.findall(
"ab*"
,
"cabb3abcbbac"
) 结果为[
'abb'
,
'ab'
,
'a'
]
'+'
匹配前一个字符
1
次或多次,re.findall(
"ab+"
,
"ab+cd+abb+bba"
) 结果[
'ab'
,
'abb'
]
'?'
匹配?前一个字符
1
次或
0
次
'{m}'
匹配前一个字符m次
'{n,m}'
匹配前一个字符n到m次,re.findall(
"ab{1,3}"
,
"abb abc abbcbbb"
) 结果
'abb'
,
'ab'
,
'abb'
]
'|'
匹配|左或|右的字符,re.search(
"abc|ABC"
,
"ABCBabcCD"
).group() 结果
'ABC'
'(...)'
分组匹配,re.search(
"(abc){2}a(123|456)c"
,
"abcabca456c"
).group() 结果 abcabca456c 如果是findall 就没有了group方法了
'\A'
只从字符开头匹配,re.search(
"\Aabc"
,
"alexabc"
) 是匹配不到的
'\Z'
匹配字符结尾,同$
'\d'
匹配数字
0
-
9
'\D'
匹配非数字
'\w'
匹配[A
-
Za
-
z0
-
9
]
'\W'
匹配非[A
-
Za
-
z0
-
9
]
's'
匹配空白字符、\t、\n、\r , re.search(
"\s+"
,
"ab\tc1\n3"
).group() 结果
'\t'
'(?P<name>...)'
分组匹配 re.search(
"(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})"
,
"371481199306143242"
).groupdict(
"city"
)
结果{
'province'
:
'3714'
,
'city'
:
'81'
,
'birthday'
:
'1993'
}
套路
从字符串开头往后开始准备
import re
print(re.match('^韩','韩滨龙123'))
print(re.match('^韩','韩滨龙123').group() )#查看匹配到了什么
从整个文本开始搜索
print(re.search('','韩滨龙123'))
返回所有的
print(re.findall('','韩滨龙123'))
分割
print(re.split('','韩滨龙123'))
替换
print(re.sub('','韩滨龙123')
仅需轻轻知道的几个匹配模式
1
2
3
|
re.search('','',flags=re.I) re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
re.search('','',flags=re.M) WIN可能不好用M(MULTILINE): 多行模式,改变 '^'
和
'$'
的行为(参见上图)
S(DOTALL): 点任意匹配模式,改变
'.'
的行为
|