模块:os、sys、time、logging、json/pickle、hashlib、random、re

模块分为三种:

  • 自定义模块
  • 第三方模块
  • 内置模块

自定义模块

1、定义模块

将一系列功能函数或常量封装为一个独立的.py或多个.py文件。

2、导入模块

 import module
from module.xx import yy
from module.xxxxx import as rename 对于难于编写可以将其重新命名为一个新的模块名字
from module.xx import * #不介意应用这种导入方式,此种方式对于较大模块容易产生函数名冲突。

3、导入模块基准路径

import sys
sys.path.append("导入模块的路径")

模块系统路径

import os
import sys
project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(project_path)

添加模块路径方法

注:os.path.dirname()表示当前目录的上一级目录

内置模块

所谓内置模块是python自带的模块,使用前先导入。

一、sys

相关操作:

sys.argv #命令行参数列表,第一个参数默认是程序路径
sys.exit(n) #退出程序
sys.version #获取python解释器的版本信息
sys.maxint #最大的int值
sys.path # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.stdin #输入相关
sys.stdout #输出相关
sys.stderror #错误相关
 import sys
import time def view_bar(num, total):
rate = float(num) / float(total)
rate_num = int(rate * 100)
r = '\r%s>%d%%' % ("."*rate_num,rate_num, ) # 回到当前行的首个位置
sys.stdout.write(r)
sys.stdout.flush() if __name__ == '__main__':
for i in range(0, 100):
time.sleep(0.1)
view_bar(i, 100)

进度条

二、os

用于提供系统级别的操作——常用一些功能

os.path.exists(path)     #如果path存在,返回True;如果path不存在,返回False.
os.makedirs('dir1/dir2') #可生成多层递归目录
os.removedirs('dirname1')#若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') #生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') #删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()              #删除一个文件
os.rename("oldname","new")#重命名文件/目录
os.path.abspath(path) #返回path规范化的绝对路径
os.path.join(path1[, path2[, ...]]) #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.split(path)      #将path分割成目录和文件名二元组返回 os.path.dirname(path) #返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)#返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.isabs(path)      #如果path是绝对路径,返回True
os.path.isfile(path)     #如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)      #如果path是一个存在的目录,则返回True。否则返回False

三、time  

  • 时间戳               1970年1月1日之后的秒,即:time.time()
  • 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')
  • 结构化时间          元组包含了:年、日、星期等... time.struct_time    即:time.localtime()
 print time.time()#1970年1月1日之后的秒
print time.mktime(time.localtime()) print time.gmtime() #可加时间戳参数
print time.localtime() #可加时间戳参数
print time.strptime('2014-11-11', '%Y-%m-%d') print time.strftime('%Y-%m-%d') #默认当前时间
print time.strftime('%Y-%m-%d',time.localtime()) #默认当前时间
print time.asctime()
print time.asctime(time.localtime())
print time.ctime(time.time()) import datetime
'''
datetime.date:表示日期的类。常用的属性有year, month, day
datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond
datetime.datetime:表示日期时间
datetime.timedelta:表示时间间隔,即两个时间点之间的长度
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
strftime("%Y-%m-%d")
'''
import datetime
print datetime.datetime.now()
print datetime.datetime.now() - datetime.timedelta(days=5)

补充:

print(time.asctime(time.localtime())) #返回时间格式Mon Oct 24 21:21:03 2016"
print(time.ctime()) #返回Mon Oct 24 21:22:03 2016 格式, 同上
print(time.ctime(time.time()-86400))#返回Sun Oct 23 21:22:03 2016 返回当前时间的前一天
print(time.gmtime()) #返回一个struct_time 结构体 将当前时间赋值在struct_time每一个成员中(这里时间是utc时间应该是格林威治时间)
time.mktime(time.localtime())# mktime 必须传一个struct_time 对象否则报错,将时间对象转换为时间戳
time.sleep(4) #阻塞秒数
%Y  Year with century as a decimal number.
%m Month as a decimal number [01,12].
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%M Minute as a decimal number [00,59].
%S Second as a decimal number [00,61].
%z Time zone offset from UTC.
%a Locale's abbreviated weekday name.
%A Locale's full weekday name.
%b Locale's abbreviated month name.
%B Locale's full month name.
%c Locale's appropriate date and time representation.
%I Hour (12-hour clock) as a decimal number [01,12].
%p Locale's equivalent of either AM or PM.

四、logging 日志模块

  • 单文件日志
 #写到文件 指定日志级别  注:只有高于或者等于指定级别的信息才会被记录 Debug  info warning error critical
logging.basicConfig(filename='example.log', level=logging.INFO,
format='%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p') logging.debug("I am a debug log ")
logging.info("info log")
logging.warning("warning log")
logging.error("error log")
logging.critical("critical log")
  • 多文件日志
 import logging
#create a logger
logger = logging.getLogger('TEST_LOG')
logger.setLevel(logging.WARNING) #全局日志级别 #如果全局级别高 以全局为准 如果局部变量的级别高 就按局部,
#换句话说 局部最高就优先 全局级别最高 就优先 #创建输出到屏幕的 handler
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG) #设置 屏幕输出日志级别 #创建输出到文件的handler
fh = logging.FileHandler("access.log")
fh.setLevel(logging.DEBUG) #往另一个文件写
fh2 = logging.FileHandler("access2.log")
fh2.setLevel(logging.ERROR)
#创建输出格式
formatter_ch = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s ')
formatter_fh = logging.Formatter('%(asctime)s-%(filename)s-%(module)s-%(lineno)d-%(levelname)s-%(message)s') #设定 格式
ch.setFormatter(formatter_ch)
fh.setFormatter(formatter_fh)
fh2.setFormatter(formatter_fh) #将handler 注册到logger
logger.addHandler(ch)
logger.addHandler(fh)
logger.addHandler(fh2) logger.debug("debug log ")
logger.info("info log")
logger.warning("warning log")
logger.error("error log")
logger.critical("critical log")

Format:日志记录格式

  

五、序列化

  • json 用于【字符串】和 【python基本数据类型】 间进行转换
  • pickel  用于【python特有的类型】 和 【python基本数据类型】间进行转换
 import  json
import requests
#序列化 是将python基本数据类型转化为字符串
dic ={"key":123}
print(dic,type(dic))
ret = json.dumps(dic)
print(ret,type(ret)) #反序列化 将字符串转化为python 基本数据类型
dic2 = json.loads(ret)
print(dic2,type(dic2)) re =requests.get('http://wthrcdn.etouch.cn/weather_mini?city=北京')
re.encoding ='utf-8'
print(re.text)
#转化为字典 进行操作
w_dic = json.loads(re.text)
print(w_dic,type(w_dic)) #dump and load #dump 先序列化 然后在写入文件 load 先读出来再将数据反序列化为python基本数据类型
li = [11,22,33]
json.dump(li,open('db','w'))
li2 = json.load(open('db','r'))
print(li2,type(li2))

六、加密hashlib模块

用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法:用法基本相同

 import hashlib
def md5(str):
md5_obj = hashlib.md5() # 更安全 可以 md5(bytes(str,encoding='utf-8'))
md5_obj.update(bytes(str,encoding="utf-8"))
encodetext =md5_obj.hexdigest()
print(encodetext)
md5("sdfdsf")

以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

 import hmac  
h = hmac.new(bytes('898oaFs09f',encoding="utf-8")) h.update(bytes('admin',encoding="utf-8"))
print(h.hexdigest())

七、随机数random模块

 import random

 print(random.random())
print(random.randint(1, 2))
print(random.randrange(1, 10))

随机验证码实现:

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

第三方模块

  • 安装:

pip3 install requests

  • 源码安装

例子:安装request

1.下载第三方模块源码(百度搜索模块名字)

http://www.python-requests.org/en/master/user/install/#install

2.解压模块

3.cd 到setup.py目录下

4.执行 python setup.py install (如果不依赖其他模块,直接就会安装成功)

提示(正则表达式我将单独整理)

>>>END

python之路——基础篇(2)模块的更多相关文章

  1. python之路基础篇

    基础篇 1.Python基础之初识python 2.Python数据类型之字符串 3.Python数据类型之列表 4.Python数据类型之元祖 5.Python数据类型之字典 6.Python Se ...

  2. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  3. 深度学习入门者的Python快速教程 - 基础篇

      5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...

  4. [资料分享]Python视频教程(基础篇、进阶篇、项目篇)

    Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...

  5. python学习之路基础篇(第五篇)

    前四天课程回顾 1.python简介 2.python基本数据类型 类: int:整型 | str:字符串 | list:列表 |tuple:元组 |dict:字典 | set:集合 对象: li = ...

  6. Python学习笔记——基础篇【第五周】——模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  7. python学习之路基础篇(第六篇)

    一.算法 冒泡排序 两两比较 打的沉下去,小的浮上来  从而把数字从小到大排列出来 选择排序 随机取一个索引作为最大值,然后和列表中的其他索引进行比较,如果l[0]<l[1],则将l[1]修改为 ...

  8. Python学习笔记——基础篇【第一周】——变量与赋值、用户交互、条件判断、循环控制、数据类型、文本操作

    目录 Python第一周笔记 1.学习Python目的 2.Python简史介绍 3.Python3特性 4.Hello World程序 5.变量与赋值 6.用户交互 7.条件判断与缩进 8.循环控制 ...

  9. Python学习笔记——基础篇【第六周】——面向对象

    Python之路,Day6 - 面向对象学习 本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.       同时可参考链接: http:// ...

随机推荐

  1. [源码]String StringBuffer StringBudlider(1String部分)

      String     /** The value is used for character storage. */     private final char value[];  /** Th ...

  2. 介绍Unreal Engine 4中的接口(Interface)使用C++和蓝图

    这个教程是从UE4 Wiki上整理而来. 在C++中直接使用Interface大家应该很熟悉.只是简单先定义一个个有虚函数的基类,然后在子类中实现相应的虚函数.像这样的虚函数的基类一般概念上叫接口.那 ...

  3. Partitioning & Archiving tables in SQL Server (Part 1: The basics)

    Reference: http://blogs.msdn.com/b/felixmar/archive/2011/02/14/partitioning-amp-archiving-tables-in- ...

  4. Xcode 8 在XIB中布局View尺寸1000*1000

    Xcode 8 中XIB布局变动,在界面未展示之前,所有的View的布局都会给一个1000*1000的初始值,查看视图层级可以看到View拖得很长, 有时候我们在ViewDidLoad中布局的时候会使 ...

  5. iOS--KVO的实现原理与具体应用

    本文分为2个部分:概念与应用. 概念部分旨在剖析KVO这一设计模式的实现原理,应用部分通过创建的项目,以说明KVO技术在iOS开发中所带来的作用: 如果是作为是刚接触KVO的初学者,可以在了解基本原理 ...

  6. VC编程小技巧之框架窗口及其他

    1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...

  7. 解决WAMP搭建PHP环境后后局域网其他机器无法访问的问题

    刚安装wamp以后本地访问localhost或者127.0.0.1可以访问,但是如果局域网内其他电脑访问则出现403错误.从网上找了很多,各种说法都有了,却没几个好用的.解决问题方法如下: 1,首先确 ...

  8. 动态规划小结(dynamic programming)

    动态规划在很多情况下可以降低代码的空间时间复杂度. 判断一道问题能否应用动态规划,需要关注问题是否具有最优子结构,当前规模的问题的解在之前问题的解里面,还要注意的是要满足无后效性的原则.随后就是寻找递 ...

  9. nf_conntrack被启用导致服务故障

    1.查看是否有 nf_conntrack 使用iptable -L -t nat  查看,注意!!!查看也会启用nf_conntrack,任何和nat有关的命令都会启用nf_contrack -L 查 ...

  10. Vuejs使用笔记 --- 框架

    这两天学了vuejs的模板,于此纪录一下. 这是整个大文件夹的配置,现在我们看到的所有文件都不需要去管,说要关注也只需要关注“index.html” "index.html"里面是 ...