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,要不然会报错,所以特殊字符如 }, 都是不能处理的