1、time和datetime模块
1.1、time一般分为时间戳、字符串模式和struct格式
时间戳:time.time() 格林威治时间,需要加上东八区的时差
time.time()+28800
时间戳转化为字符串格式:
自定义格式:time.strftime("%Y-%m-%d %H:%M:%S"),这种格式都是可以自主定义的,代表本时区的时间
struct格式:time.gmtime(time.time()+28800)
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=7, tm_hour=7, tm_min=46, tm_sec=44, tm_wday=2, tm_yday=311, tm_isdst=0)
string_2_struct = time.gmtime(time.time()+28800)
时间戳格式的转格式:
time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(time.time()+28800)) 这个挺无聊的
time.mktime(string_2_struct) 转换成时间戳格式,只能是struct格式才能转换成时间戳格式
1.2、datetime 是time的升级版
datetime.datetime.now() :2018-11-08 15:56:27.659572 这个小数点太多了,不知道该如何处理掉
datetime.datetime.now() + datetime.timedelta(3) : 当前时间加3天
datetime.datime.now() + datetime.timedelta(-3) : 当前时间减3天
datetime.datetime.now() + datetime.timedelta(hours=3) :加3小时
datetime.datetime.now() + datetime.timedelta(hours=3)
datetime.datetime.now() + datetime.timedelta(minutes=3)
datetime.datetime.now().replace(mintue=3,hour=2) 时间替换
2、random模块
random.random():随即数字
random.randint(1,2) :包括1和2,但是是一个数字
random.randrange(1,10) : 1-9 。代表一个数字
range(1,10):代表 1-9中的所有数字,不是一个数字,不能执行
生成随即数字:
import random
checkcode = ' '
for i in range(4):
current = random.randrange(0,4)
if current != i:
temp = chr(random.randint(65,90))
else:
temp = random.randint(0,9)
checkcode += str(temp)
print checkcode
3、OS模块
os.makedirs('dirname1/dirname2') 递归创建文件
os.mkdir('dirname') 生成单级目录
os.system("bash command") 可以直接运行shell命令,最好别用
os.path很多方法
os.sep 输出操作系统特定的路径分隔符,win下为“\”,Linux下为“/”
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略,前面的绝对路径忽略
4、sys模块
sys.exit(0) 退出程序,正常退出时exit(0)
sys.stdout.write(‘please:’)
5、shelve 模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
持久化:
import shelve,datetime
d = shelve.open('shelve_test') # 打开一个文件
# print(d.get("test"))
# print(d.get("info"))
# d.get("date")
info = {'age':22,"job":'IT'}
name = ["alex", "rain", "test"]
d["test"] = name # 持久化列表
d["info"] = info # 持久化字典
d['date'] = datetime.datetime.now()
d.close()
反持久化:
import shelve,datetime
d = shelve.open('shelve_test') # 打开一个文件
print(d.get("test"))
print(d.get("info"))
d.close()
5、logging模块
5.1、python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,
logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别
logging.basicConfig(filename='example.log',level=logging.INFO,
format='%(asctime)s %(levelno)s %(message)s', datefmt='%m_%d_%Y %H:%M:%S ')
创建文件名称,超过info的信息才能写入,format定义的是写入日志的格式,后边datefmt是跟上日期,而且asctime是日期放到最前面
logging.info('So should this') #写入日志
5.2、Handler()模块的使用
ch = logging.StreamHandler() #相当于对数据流进行处理,输出也是一定格式
ch.setLevel(logging.DEBUG)
#创建些人文件的日志流
fh = logging.FileHandler("access.log") #可以写到固定文件中
fh.setLevel(logging.DEBUG)
#创建显示日志的格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
#将日志格式加入到桌面和文件日志数据中
ch.setFormatter(formatter)
fh.setFormatter(formatter) #添加显示的格式和写入的格式
#追加方式到日志
logger.addHandler(ch)
logger.addHandler(fh)
#写入的日志内容
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
6、re模块,正则表达式
6.1、正则表达式可以对字符串进行很好的处理,处理方法如下:
re.search 匹配包含(可以指定,也可以用正则)
re.findall 把所有匹配到的字符放到以列表中的元素返回 re.splitall 以匹配到的字符当做列表分隔符 re.sub 匹配字符并替换 '.' 默认匹配除
之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行'^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","
abc
eee",flags=re.MULTILINE)'$' 匹配字符结尾,或e.search("foo$","bfoo
sdfsf",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") 是匹配不到的'' 匹配字符结尾,同$'d' 匹配数字0-9'D' 匹配非数字'w' 匹配[A-Za-z0-9]'W' 匹配非[A-Za-z0-9]'s' 匹配空白字符、 、
、
, re.search("s+","ab c1
3").group() 结果 ' 're.search("(w){2}",i).group() == "de" #匹配字符串的前两个[A-Za-z0-9]
re.search("(d+D*){4}(d+)",i) #匹配数字无数个加一个特殊字符,然后是总共4次
re.search("d+",i) # 匹配数字4次
re.search("pool idx",i) #匹配特定字符
特别注释:re.search("","string") 只能是str,要不然会报错,所以特殊字符如 }, 都是不能处理的