python小白成长周记四 模块 内置模块二 sys json xml PyYSML configparser hashlib re

时间:2021-08-20 03:20:30
一 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
  
=  shelve. open ( 'shelve_test' #打开一个文件 
    
  
=  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): 点任意匹配模式,改变 '.' 的行为