前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python Day5

Python Day5

作者头像
py3study
发布2020-01-13 15:34:53
2130
发布2020-01-13 15:34:53
举报
文章被收录于专栏:python3python3

模块

1、什么是模块 最常见的场景,一个模块就是包含了一组功能的python文件,例如module.py,模块名是module 可以使用import module,四个通用类别:

代码语言:javascript
复制
      1 使用python编写的.py文件

      2 已被编译为共享库或DLL的C或C++扩展

      3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

      4 使用C编写并链接到python解释器的内置模块

2、为什么要用模块

代码语言:javascript
复制
    1、从文件级别组织程序,更方便管理
    2、拿来主义,提升开发效率

3、如何使用模块-》import spam

1、第一次导入模块,会发生3件事,重复导入只会引用之前加载好的结果

代码语言:javascript
复制
1.产生一个新的名称空间
2.运行spam.py代码,产生的名字都存放于1的名称空间中,运行过程中global关键字指向的就是该名称空间
3.在当前名称空间拿到一个名字spam,该名字指向1的名称空间
引用spam.py中名字的方式:spam.名字
强调:被导入的模块在执行过程中使用自己独立的名称空间作为全局名称空间

2、起别名:import spam as sm 3、一行导入多个模块:import time,sys,spam

4、如何使用模块-》from 模块名 import 名字

代码语言:javascript
复制
    优点:引用时不用加前缀,简单
    缺点:容易与当前名称空间的名字冲突
代码语言:javascript
复制
        from spam import money as m

        from spam import money,read1,read2,change

        from spam import * #*包含除了下划线开头以外所有的名字

        可以使用__all__来控制*

        __all__=['money','read1'] #这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字

5、一个python文件的两种用途

代码语言:javascript
复制
      1、当做脚本执行:__name__ == '__main__'
      2、当做模块被导入使用:__name__ == '模块名'
代码语言:javascript
复制
        if __name__ == '__main__':
            pass

6、模块的搜索路径 内存----》内置模块-----》sys.path

代码语言:javascript
复制
1、什么是包
    包就是一个包含了__init__.py文件的文件夹(可以往该文件夹下放一堆子模块)

2、包的使用
    注意:但凡是在导入时,出现.,这是导入包才有的语法,.的左边必须是一个包,使用的时候没有这种限制

     包只是模块的一种形式而已,包的本质就是一种模块

日志模块的使用

代码语言:javascript
复制
import os
import logging.config

BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG_PATH=os.path.join(BASE_DIR,'log','access.log')
COLLECT_PATH=os.path.join(BASE_DIR,'log','collect.log')

#定义三种日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]'

simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'

#log配置字典
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
        'id_simple' : {
            'format' : id_simple_format
        },
    },
    'filters': {},
    'handlers': {
        #打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        #打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': LOG_PATH,  # 日志文件
            'maxBytes': 1024*1024*5,  # 日志大小 5M
            'backupCount': 5,
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
        'collect': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'simple',
            'filename': COLLECT_PATH,  # 日志文件
            'maxBytes': 1024*1024*5,  # 日志大小 5M
            'backupCount': 5,
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
    },
    'loggers': {
        '': {
            'handlers': ['default', 'console','collect'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': False,  # 向上(更高level的logger)传递
        },
    },
}

代码语言:javascript
复制
from conf import settings
import logging.config

def logger_handle(log_name):
    logging.config.dictConfig(settings.LOGGING_DIC)  # 导入上面定义的logging配置
    logger = logging.getLogger(log_name)  # 生成一个log实例
    return logger

代码语言:javascript
复制
log_msg = 'egon给alex转了1毛钱'
#调用日志功能记录日志
#common.logger(log_msg)
logger = common.logger_handle('转账')
logger.debug(log_msg)

re模块

Python Day5
Python Day5

http://www.cnblogs.com/linhaifeng/articles/6384466.html#_label13

代码语言:javascript
复制
重复:.|?|*|+|{m,n}|.*|.*?
.代表任意一个字符
print(re.findall('a.b','a1b a b a-b aaaaaab'))
                      a.b
print(re.findall('a.b','a1b a b a\nb a-b aaaaaab',re.DOTALL))
                      a.b

?:代表?号左边的字符出现0次或者1
print(re.findall('ab?','a ab abb abbbb a1b')) #['a','ab','ab','ab','a']
                      #                  ab?

*:代表*号左边的字符出现0次或者无穷次
print(re.findall('ab*','a ab abb abbbb a1b')) #['a','ab','abb','abbbb','a']
                                       ab*

+:代表+号左边的字符出现1次或者无穷次
print(re.findall('ab+','a ab abb abbbb a1b')) #['ab','abb','abbbb']
                      #                  ab+

{m,n}:代表左边的字符出现m次到n次
print(re.findall('ab{0,1}','a ab abb abbbb a1b')) #['ab','abb','abbbb']
print(re.findall('ab?','a ab abb abbbb a1b')) #['ab','abb','abbbb']

print(re.findall('ab{0,}','a ab abb abbbb a1b')) #['ab','abb','abbbb']
print(re.findall('ab*','a ab abb abbbb a1b')) #['ab','abb','abbbb']

print(re.findall('ab{1,}','a ab abb abbbb a1b')) #['ab','abb','abbbb']
print(re.findall('ab+','a ab abb abbbb a1b')) #['ab','abb','abbbb']

print(re.findall('ab{2,4}','a ab abb abbbb a1b')) #['abb', 'abbbb']

.*:贪婪匹配
print(re.findall('a.*b','xxxy123a123b456b'))
                               a.*b
.*?:非贪婪匹配
print(re.findall('a.*?b','xxxy123a123b456b'))

|:或者
print(re.findall('compan(y|iess)','too many companiess have gone bankrupt, and the next one is my company'))
print(re.findall('compan(?:y|iess)','too many companiess have gone bankrupt, and the next one is my company'))
                                                                        #compan(y|iess)

print(re.findall('href="(.*?)"','<a href="http://www.baidu.com">点击我</a>'))

time与datetime模块

#在Python中,通常有这几种方式来表示时间: #1、时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型 #2、格式化的时间字符串(Format String) #3、结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

import time #时间戳

代码语言:javascript
复制
print(time.time())
1515724610.869189

#格式化的时间字符串

代码语言:javascript
复制
print(time.strftime("%Y-%m-%d %X"))
2018-01-12 10:42:21

#结构化时间

代码语言:javascript
复制
print(time.localtime()) #本地时区的struct_time
#年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=12, tm_hour=10, tm_min=50, tm_sec=49, tm_wday=4, tm_yday=12, tm_isdst=0)
print(time.gmtime())  #UTC时区的struct_time
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=12, tm_hour=2, tm_min=50, tm_sec=49, tm_wday=4, tm_yday=12, tm_isdst=0)

#其中计算机认识的时间只能是'时间戳'格式 #于是有了下图的转换关系

Python Day5
Python Day5

#将一个时间戳转换为当前时区的struct_time

代码语言:javascript
复制
res1=time.time()
res2=(time.localtime(res1))
print(res2)
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=12, tm_hour=11, tm_min=18, tm_sec=52, tm_wday=4, tm_yday=12, tm_isdst=0)

#再转换为结构化时间

代码语言:javascript
复制
print(time.strftime("%Y-%m-%d %X", res2))
2018-01-12 11:19:48

#datetime模块 import datetime

代码语言:javascript
复制
print(datetime.datetime.now())
2018-01-12 11:26:47.797132
print(datetime.date.fromtimestamp(time.time()))
2018-01-12
print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模块
  • 3、如何使用模块-》import spam
  • 4、如何使用模块-》from 模块名 import 名字
  • 日志模块的使用
  • re模块
  • time与datetime模块
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档