代码改变世界

python 第五天

2018-11-09 16:54  小于漫谈  阅读(213)  评论(0编辑  收藏  举报

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   匹配字符并替换
常用的正则表达式符号:
'.'     默认匹配除\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'
6.2、示例:
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,要不然会报错,所以特殊字符如 },\n都是不能处理的