常用模块
1. 时间模块 ***
2. random模块 *****
3. os模块
4. sys模块
5. 序列化模块 *****
6. hashlib模块 ****
7. logging模块 *****
时间模块:
#导入及常用方法
import time
1.time.sleep(secs)
(线程)推迟指定的时间运行。单位为秒
2、time.time() 获取当前时间戳
时间分为三种:
- 时间戳时间,float数据类型,格林威治时间,给机器用的时间
- 格式化时间,str数据类型(字符串时间) ,给人看的时间
- 结构化时间,时间对象,是以上两种时间的中间状态
#时间戳时间
import time
print(time.time())
#格式化时间
import time
print(time.strftime('%Y-%m-%d'))
print(time.strftime('%Y-%m-%d %H:%M:%S'))
#结构化时间
time_obj = time.localtime()
print(time_obj) #显示属性
print(time_obj.tm_day)#类似于对象调用属性的用法
几种时间格式之间的转换:
格式化的时间字符串(Format string):
- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(000-9999)
- %m 月份(01-12)
- %d 月内中的一天(0-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(01-12)
- %M 分钟数(00=59)
- %S 秒(00-59)
- %a 本地简化星期名称
- %A 本地完整星期名称
- %b 本地简化的月份名称
- %B 本地完整的月份名称
- %c 本地相应的日期表示和时间表示
- %j 年内的一天(001-366)
- %p 本地A.M.或P.M.的等价符
- %U 一年中的星期数(00-53)星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始
- %W 一年中的星期数(00-53)星期一为星期的开始
- %x 本地相应的日期表示
- %X 本地相应的时间表示
- %Z 当前时区的名称
- %% %号本身
random模块:
- import random
- random.random() #0-1随机小数
- random.uniform(1,10) #1-10随机小数
- random.randint(1,2) #闭区间,包含2在内的随机整数
- random.randrange(1,2) #[1,2) 不包含2
随机抽取一个值:
lst = [1,2,3,'aaa',('wahaha','qqxing')]
ret = random.choice(lst)
print(ret)
随机抽取多个值:
lst = [1,2,3,'aaa',('wahaha','qqxing')]
ret = random.sample(lst,2)
print(ret)
打乱顺序,在原列表中顺序打乱,只能排列表:
lst = [1,2,3,'aaa',('wahaha','qqxing')]
random.shuffle(lst)
print(lst)
生成六位数字+字母验证码:
def rand_code(n=6):
code = ''
for i in range(n):
num = str(random.randint(0,9))
rand_alph = chr(random.randint(97,122))
rand_alph_upper = chr(random.randint(65,90))
atom_code = random.choice([num,rand_alph,rand_alph_upper])
code += atom_code
return code
ret = rand_code()
print(ret)
os模块:
- os.makedirs(‘dirname1/dirname2’) 可生成多层递归目录
- os.removedirs(‘dirname1’) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依次类推
- os.mkdir(’‘dirname’) 生成单级目录
- os.listdir(‘dirname’) 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
- os.remove() 删除一个文件
- os.stat(‘path/filename’) 获取文件/目录信息
- os.system(‘bash command’) 运行shell命令,直接显示
- os.popen(‘bash command’).read() 运行shell命令,获取执行结果
- os.getcwd() 获取当前工作目录,即python脚本工作的目录路径
- os.chdir(‘dirname’) 改变当前脚本工作目录
- os.path.abspath(path) 返回path规范化的绝对路径
- os.path.split(path) 将path分割成目录和文件名二元组返回
- os.path.dirname(name) 返回path的目录。其实就是os.path.split(path) 的第一个元素
- os.path.basename(path) 返回path最后的文件名,即os.path.split(path)的第二个元素。 如果path以/或 \ 结尾,则返回空值。
- os.path.exists(path) 如果path存在,返回True,否则False
- os.path.isfile(path) 如果path是一个存在的文件,返回True
- os.path.isdir(path) 如果path是一个存在的目录,则返回True
- os.path.getsize(path) 返回path的大小
sys模块:
- sys.argv 命令行参数list,第一个元素是程序本身路径
- sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
- sys.version 获取python解释程序的版本信息
- sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
- sys.platform 返回操作系统平台名称
序列化模块:
什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。
为什么要序列化:
1、以某种存储形式使自定义对象持久化
2、将对象从一地方传递到另一个地方
json模块提供了四个功能:dupms,dump,loads,load
import json
dic = {'aaa':'bbb','ccc':'ddd'}
str_dic = json.dumps(dic) #转成序列化
print(dic)
print(str_dic,type(str_dic))
ret = json.loads(str_dic) #从序列化转成数据结构字典
json格式的限制:json格式的key必须是字符串,如果数字为key,那么dumps之后会强行转化。json不支持元组做key!!!
dic = {1:2,3:4}
str_dic = json.dumps(dic)
print(str_dic)
new_dic = json.loads(str_dic)
print(new_dic)
中文格式的,需要使用ensure_ascii
dic3 = {'abc':(1,2,3),'country':'中国'}
str_dic3 = json.dumps(dic3,ensure_ascii = False)
print(str_dic3)
用于序列号的两个模块:
- json,用于字符串和python数据类型间进行转换
- pickle,用于python特有的类型和python的数据类型间进行转换。
-pickle模块提供了四个功能:dumps、dump、loads、load 可以把python中任意的数据类型序列化
这里要说明一下,json是一种所有的语言都可以识别的数据结构。
如果我们将一个字典或者序列化成了一个json存在文件里,那么java代码或者js代码也可以拿来用。
但是如果我们用pickle进行序列化,其他语言就不能读懂这是什么了~
所以,如果你序列化的内容是列表或者字典,我们非常推荐你使用json模块
hashlib模块:
摘要算法的模块能够把一个字符串数据类型的变量转换成一个定长的密文的字符串,这个字符串里的每一个字符都是一个十六进制数字。
对于同一个字符串,不管这个字符串有多次,只要是相同的,无论在什么环境下,多少次执行,在任何语言中,使用相同的算法,得到的结果永远是相同的。
md5算法:
import hashlib
s = 'alex3714'
#md5是一个算法,32位的字符串,每个字符都是一个十六进制
md5_obj = hashlib.md5()
md5_obj.update(s.encode('utf-8'))
res = md5_obj.hexdigest()
print(res,len(res),type(res))
sha1算法:40位的字符串,每个字符都是一个十六进制。
import hashlib
s = 'alex3714'
sha1_obj.update(s.encode('utf-8'))
res_sha = sha1_obj.hexdigest()
print(res_sha,len(res_sha),type(res_sha))
logging模块:
功能:
- 日志格式的规范
- 操作的简化
- 日志的分级管理
logging模块的使用:
- 普通配置型 ,简单的,可定制化差
- 对象配置型 ,复杂的,可定制化强
对象配置型:
- 创建一个logger对象
- 创建一个文件管理操作符
- 创建一个屏幕管理操作符
- 创建一个日志输出的格式
- 文件管理操作符,绑定一个格式
- 屏幕管理操作符,绑定一个格式
- logger对象 绑定 文件管理操作符
- logger对象 绑定 屏幕管理操作符
import logging
#创建一个logger对象
logger = logging.getLogger()
#创建一个文件管理操作符
fh = logging.FileHandler('logger.log',encoding='utf-8')
#创建一个屏幕管理操作符
sh = logging.StreamHandler()
#创建一个日志输出的格式
format1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#文件管理操作符 绑定一个格式
fh.setFormatter(format1)
#屏幕管理操作符 绑定一个格式
sh.setFormatter(format1)
logger.setLevel(logging.DEBUG) #显示debug,info
#logger对象 绑定文件管理操作符
logger.addHandler(fh)
#logger对象绑定屏幕管理操作符
logger.addHandler(sh)
logger.warning('警告信息')
logger.debug('debug message')
logger.info('info message')
同时生成了logger.org的日志文件。