参考:

http://www.cnblogs.com/wupeiqi/articles/5501365.html

http://www.cnblogs.com/alex3714/articles/5161349.html

1、模块的分类

内置模块:存放在lib目录下

第三方模块:通常放到site-packages目录下

自定义模块:可以通过sys.path.append(module_path)添加模块到搜索路径

2、 模块的调用顺序

按path列表从前到后的顺序按模块名搜索模块。一定避免模块重名,不要和内置模块重名。

import sys
for i in sys.path:
print(i)

打印结果类似下面:

/usr/local/lib/python35.zip
/usr/local/lib/python3.5
/usr/local/lib/python3.5/plat-linux
/usr/local/lib/python3.5/lib-dynload
/root/.local/lib/python3.5/site-packages
/usr/local/lib/python3.5/site-packages

3、导入模块的几种方法

import module   导入同级目录下的单模块
from module.xx.xx import xx    导入嵌套在文件夹下的模块
from module.xx.xx import xx as rename      as后面是模块的别名
from module.xx.xx import *

4、安装第三方包

python3自带pip模块,因此可以使用 pip install <package name>  安装第三方包

也可以使用源码安装。去官网 https://pypi.org/ 搜索你要下载的包,解压后,转到安装包目录下,运行 python setup.py install

5、json/pickle模块,序列化与反序列化

json.dumps(data)  将基本数据类型转换为字符串

json.loads(str)  将字符串转换为基本数据类型。注意:通过loads反序列化时,一定要用双引号把字符串括起来(因为在其他程序语言中,字符串是用双引号括起来的)

json.dump(data,open('file','w'))  将基本数据类型转换为字符串,并将其写入文件file

json.load(open('file','r'))   从文件file读字符串,将字符串转换为python基本数据类型

dic = {1:'a',2:'b'}
print(dic,type(dic)) #{1:'a',2:'b'}, class 'dict'
res = json.dumps(dic) #将字典dic转换为字符串res
print(res,type(res)) # "{1:'a',2:'b'}" class 'str' li = '[1,2,"kaye"]' # 内层用双引号,外层用单引号,否则会报错!!
print(li,type(li)) #'[1,2,"kaye"]', class 'str'
res = json.loads(li) #将字符串li转换为列表res
print(res, type(res)) #[1,2,"kaye"], class 'list'

requests.get()方法从API获取字符串,用json.loads()把字符串转换为python基本数据类型。代码如下:

import requests
import json res = requests.get('http://wthrcdn.etouch.cn/weather_minni?city=北京')
requests.encoding = 'utf-8'
dic = json.loads(res.text)
print(dic,type(dic))

pickle.dumps(data) 将python对象转换为字符串

pickle.loads(str)  将文件内容转换为python对象

pickle.dump(data,open('file','wb')) 将python对象转换为字符串,并将其写入文件file,一定要加b(表示以二进制存储到文件),不然会报错

pickle.load(str,open('file','r'))  从文件file读字符串,将文件内容转换为python对象

json VS pickle

json模块可以支持跨语言的基本数据类型(支持python,c#,php.....等多种语言,但是只支持基本数据类型包括列表、字典、元组等等)

pickle模块可以对复杂类型做操作,比如对象,但是不能支持python以外的其他语言

6、time/datetime模块

import time

print(time.time())      # 返回当前时间戳(从1970年1月1日开始计时到现在,一共有多少秒)
print(time.ctime()) # 返回当前时间,可读性更好
print(time.gmtime()) # 获得格林威治时间(UTC时间)的struct_time模式(时间对象),该对象属性包括tm_yaer,tm_mon,tm_mday,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst
print(time.localtime()) # 和gmtime类似,但返回的是本地时间
print(time.mktime()) # 将stuct_time格式转换为时间戳
print(time.sleep()) # 程序在这里睡眠/延迟,用于处理阻塞
print(time.strftime()) # 将stuct_time格式转换为指定的字符串格式,eg. time.strftime("%Y-%m-%d %H:%M:%S")
print(time.strptime()) # 将字符串格式的时间转换成struct_time格式, eg. time.strptime("2016-09-21","%Y-%m-%d")

datetime模块是对time模块是封装。datetime取日期更方便,time模块取时间戳更方便。

import time
import datetime print(datetime.date.today())                    # 返回格式2016-09-21
print(datetime.date.fromtimestamp(time.time())          # 将时间戳转换为人类可读的格式
print(datetime.datetime.now()                   # 返回当前时间
pritn(datetime.datetime.now().timetuple()        # 返回struct_time格式
print(datetime.datetime.now() + datetime.timedelta(days=10)) # 比现在加10天
print(datetime.datetime.now() + datetime.timedelta(days=-10)) # 比现在减10天
print(datetime.datetime.now() + datetime.timedelta(hours=-10)) # 比现在减10小时
print(datetime.datetime.now().replace(2014,5,15)) # 把当前时间中的年月日替换成2014,5,15
print(datetime.strptime())                       # 将字符串的时间转换为struct_time格式

盗图几张

7、logging模块

import logging

logging.basicConfig(filename='log.log',
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=10)
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
logging.log(10,'log')

日志的种类:

Level When it’s used
DEBUG Detailed information, typically of interest only when diagnosing problems.
INFO Confirmation that things are working as expected.
WARNING An indication that something unexpected happened, or indicative of some problem in the near future (e.g. ‘disk space low’). The software is still working as expected.
ERROR Due to a more serious problem, the software has not been able to perform some function.
CRITICAL A serious error, indicating that the program itself may be unable to continue running.

日志等级:

CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0

注:只有【当前写等级】大于【日志等级】时,日志文件才被记录。

import logging

logging.basicConfig(filename='example.log',level=logging.INFO)       # logging.INFO = 20
logging.debug('This message should go to the log file') # debug等级是10,小于当前写等级20,因此不会写入到日志文件
logging.info('So should this') #info等级是20
logging.warning('And this, too') #warning等级是30

如果想同时把log打印在屏幕和文件日志里,就需要了解一点复杂的知识 了

The logging library takes a modular approach and offers several categories of components: loggers, handlers, filters, and formatters.

logging模块提供了几个组件,包括logger, handlers, filters, formatters

  • Loggers expose the interface that application code directly uses.                             loggers把接口暴露给代码直接使用
  • Handlers send the log records (created by loggers) to the appropriate destination.   handlers发送日志信息到相应的目的地
  • Filters provide a finer grained facility for determining which log records to output.    filters提供细粒度的工具来决定哪些日志信息要输出
  • Formatters specify the layout of log records in the final output.                           formatters声明日志信息的输出结果应该如何布局
import logging

#create logger
logger = logging.getLogger('TEST-LOG') # 获取日志对象
logger.setLevel(logging.DEBUG) # 全局日志级别 # create console handler and set level to debug
ch = logging.StreamHandler() # 创建输出到屏幕的句柄
ch.setLevel(logging.DEBUG) # 设置输出到屏幕时的日志级别 # create file handler and set level to warning
fh = logging.FileHandler("access.log") # 创建输出到文件的句柄
fh.setLevel(logging.WARNING) # 设置输出到文件时的日志级别
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # add formatter to ch and fh
ch.setFormatter(formatter) # 对输出到屏幕的句柄,设置输出格式
fh.setFormatter(formatter) # 对输出到文件的句柄,设置输出格式 # add ch and fh to logger
logger.addHandler(ch) # ch句柄添加到logger
logger.addHandler(fh) # fh句柄添加到logger # 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

全局日志级别 VS 局部日志级别

当全局日志级别高于局部日志级别,以全局日志级别为准

当全局日志级别低于局部日志级别,以局部日志级别为准

小结一下上面代码中的逻辑:

1,创建一个logger,为logger设定日志级别(setLevel)

2,创建handler(输出到屏幕的是StreamHandler,输出到文件的是FileHandler),为handler设置日志级别(setLevel)

3,创建formatter,将formatter注册到handler(setFormatter)

4,将handler注册到logger

Formatter对象的属性如下:

python模块概况,json/pickle,time/datetime,logging的更多相关文章

  1. python模块之json pickle

    1.json模块 功能:将其他形式的数据类型转化为json字符串类型,将json字符串转化为其他对应的数据类型 方法:json.dumps()  作用:将所有单引号变成双引号:将所有数据类型变成字符串 ...

  2. [re模块、json&pickle模块]

    [re模块.json&pickle模块] re模块 什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则 ...

  3. python模块之JSON

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之JSON #1.JSON #JSON表示的对象就是标准的JavaScript语言的对象 # ...

  4. Python包,json&pickle,time&datetime,random模块

    补充内容: 解决模块循环导入的两种方法:(不得已而为之,表示程序结构不够严谨) 将导入模块语句放在文件最下方 保证语句导入之前函数内代码能够被执行 将导入语句放进函数体内 使其不影响整个函数的运行 包 ...

  5. python 模块 - 序列化 json 和 pickle

    1,引入 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval ...

  6. 常用模块---sys&logging&序列化模块(json&pickle)

    sys 模块 sys.argv 命令行参数List,第一个元素是程序本身路径,通常用来避免io 阻塞 print('欢迎进入') info=sys.argv ': print('login succe ...

  7. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  8. python 序列化及其相关模块(json,pickle,shelve,xml)详解

    什么是序列化对象? 我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization ,marshalling ,flatter ...

  9. python序列化及其相关模块(json,pickle,shelve,xml)详解

    什么是序列化对象? 我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization ,marshalling ,flatter ...

随机推荐

  1. SqlServer性能优化(一)

    一:数据存储的方式: 1.数据文件:.mdf或.ndf 2.日志文件:.ldf 二:事务日志的工作步骤: 1.数据修改由应用程序发出(在缓冲区进行缓存) 2.数据页位于缓存区缓冲中,或者读入缓冲区缓存 ...

  2. Javascript 事件(一)

    焦点事件获取焦点事件onfocus \  失去焦点事件 onblur 使浏览器能够区分用户输入的对象,当一个元素有焦点的时候,那么他就可以接收用户的输入.我们可以通过一些方式给元素设置焦点    1. ...

  3. 更新新网卡驱动,修复win7雷凌网卡Ralink RT3290在电脑睡眠时和启动网卡时出现蓝屏netr28x.sys驱动文件错误

    更新新网卡驱动,修复win7雷凌网卡Ralink RT3290在电脑睡眠时和启动网卡时出现蓝屏netr28x.sys驱动文件错误 我的本本是win7,雷凌网卡Ralink RT3290   802.1 ...

  4. option对象概念

    一.基础理解: var e = document.getElementById("selectId");   e.options = new Option("文本&quo ...

  5. python数据结构与算法——图的最短路径(Bellman-Ford算法)解决负权边

    # Bellman-Ford核心算法 # 对于一个包含n个顶点,m条边的图, 计算源点到任意点的最短距离 # 循环n-1轮,每轮对m条边进行一次松弛操作 # 定理: # 在一个含有n个顶点的图中,任意 ...

  6. 惩罚因子(penalty term)与损失函数(loss function)

    penalty term 和 loss function 看起来很相似,但其实二者完全不同. 惩罚因子: penalty term的作用是把受限优化问题转化为非受限优化问题. 比如我们要优化: min ...

  7. MindProject R6025解决

    -- 来之百度贴吧,收藏在此. 不知道吧里有没有人用mindmanager2012,如果用的话会发现保存.mmap文件后,移动到其他地方,再打开,就会出错,软件关闭.网上很多人说是模版里tips的原因 ...

  8. MapReduce简介

    MapReduce简介 参考自[http://www.cnblogs.com/swanspouse/p/5130136.html] MapReduce定义: MapReduce是一种可用于数据处理的编 ...

  9. 处理畅捷通的T+ 12.0版,web服务无故自动停止的问题

    用了几个月的畅捷通T+ 12.0版,一直都挺正常,但最近这两周,出现了好几次web服务自动停止的情况,今天抽空仔细看了Windows的日志,发现在半夜2点左右,TPlusProWebService12 ...

  10. php开发api接口

    做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),那么我们来探讨 ...