• python 第五天


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










     

  • 相关阅读:
    maven
    ELK
    gitlab 升级
    平安工作流程
    平安云应用场景
    nginx基于uwsgi部署Django (单机搭建)
    ansible
    nginx理论
    GIT
    docker(三)
  • 原文地址:https://www.cnblogs.com/qianyuyu/p/9931985.html
Copyright © 2020-2023  润新知