一、time&datetime模块

常用选项如下:

 


import time

print(time.asctime()) #返回时间格式

print(time.localtime())#返回本地时间struct时间对象

#print(time.gmtime(time.time()-80000))

t1_str = time.strptime("2016/11/13","%Y/%m/%d")

print(t1_str) #将字符串转化成struct时间对象

print(time.strptime('2016-08-20 15:31:25',"%Y-%m-%d %H:%M:%S"))#同上

t2 = time.mktime(t1_str) #struct时间对象转化成时间戳

print(t2)

t3 = time.gmtime(time.time()) #将时间戳转化struct时间格式

print(t3)

print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))

t4 = time.strftime("%Y-%m-%d %H-%M-%S",t3)

print(t4)


二、random模块

random随机数模块,用于生成随机数字

生成随机状态码方法:

1 import random
 2 import string
 3 print(random.random())
 4 print(random.randint(1,5))
 5 print(random.randrange(1,3))
 6 ---------第一种方法----------------------------------
 7 str_source = string.ascii_letters + string.digits
 8 print(random.sample(str_source,7))
 9 ----------------第二种方法----------------------
10 check = ""
11 for i in range(5):
12     current = random.randrange(0,5)
13     if current !=i:
14         temp = chr(random.randint(65,90))
15     else:
16         temp = random.randint(0,9)
17     check+=str(temp)
18 print(check)

 三、shutil模块

高级的文件压缩包处理模块

1 import shutil
2 shutil.copyfile("s1.py","s4.py")#copy文件
3 shutil.copy("s1.py","s4.py")#copy文件和权限
4 shutil.copy2("s1.py","s4.py")#copy文件和状态信息
5 shutil.copymode("s1.py","s4.py")#仅copy权限
6 shutil.rmtree(r"C:\Users\Administrator\PycharmProjects\s15\day1\a") #递归的删除文件
7 shutil.move(r"C:\Users\Administrator\PycharmProjects\s15\day1\lock",".") #移动文件
8 ret = shutil.make_archive("test",'gztar',root_dir=r"C:\Users\Administrator\PycharmProjects\s15\day1")
9 #test目标文件名,gztar 压缩类型,root_dir要压缩的文件路径

四、shelve模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式


import shelve

 

= shelve.open('shelve_test'#打开一个文件

 

class Test(object):

def __init__(self,n):

self.n = n

 

 

= Test(123

t2 = Test(123334)

 

name = ["alex","rain","test"]

d["test"= name #持久化列表

d["t1"= t      #持久化类

d["t2"= t2

 

d.close()<br><br><br>


五、xml模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单。

xml格式如下,就是通过<>节点来区别数据结构:

 xml

xml协议在各个语言都是支持的,在python中可用使用以下模块操作:

 xml使用

六、ConfigParser模块

用于生产和修改常见配置文档,举例如下:

 ConfigParser

七、hashlib模块

用于加密相关的操作,用法如下:

1 import hashlib
 2 m = hashlib.md5()
 3 m.update(b"Hello")
 4 m.update(b"It's me")
 5 print(m.digest())
 6 m.update(b"")
 7 print(m.digest()) #2进制格式hash
 8 print(len(m.hexdigest())) #16进制
 9 import hashlib
10 hash = hashlib.md5()
11 hash.update('admin')
12 print(hash.hexdigest())
13 
14 hash = hashlib.sha256()
15 hash.update('admin')
16 print(hash.hexdigest())
17 
18 hash = hashlib.sha512()
19 hash.update('admin')
20 print(hash.hexdigest())
21 python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密
22 
23 import hmac
24 h = hmac.new('wueiqi')
25 h.update('hellowo') 
26 print h.hexdigest()

八、日志模块

python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug()info()warning()error() and critical()

1 import logging
2 logging.basicConfig(filename='log.log',level=logging.INFO,format='%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')
3 #logging.basicConfig(format='%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')
4 logging.debug("debug")
5 logging.info("info")
6 logging.warning("warning")
7 logging.error("error")
8 logging.critical("critical")
9 logging.log(10,"log")

日志格式

Python基础学习day06_bc

如果需要将log打印在屏幕里,需要用到handler,Python使用logging模块记录日志主要涉及四个主要类:

logger提供了应用程序可以直接使用的接口;

handler将(logger创建的)日志记录发送到合适的目的输出;

filter提供了细度设备来决定输出哪条日志记录;

formatter决定日志记录的最终输出格式。

 

九、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

 

 

'\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'}


最常用的匹配语法


re.match 从头开始匹配

re.search 匹配包含

re.findall 把所有匹配到的字符放到以列表中的元素返回

re.splitall 以匹配到的字符当做列表分隔符

re.sub      匹配字符并替换


关于反斜杠问题:
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。