1、模块的概述
(1)模块定义:用来从逻辑上组织python代码实现一个功能,本质就是.py结尾的python文件
(2)包:用来从逻辑上组织模块,本质是一个目录(必须带有一个__init__.py的文件)
(3)模块导入:
import module_name
import module_name1,module_name2
from module_name import *(不建议使用)
from module_name import logger aslogger_dayi(如果有重名,给调用的模块取别名)
from module_name import moudule_name1module_name2
(4)import本质:导入模块的本质就是把Python文件解释一遍
导入包的本质就是执行该包下的__init__.py文件
(5)模块的分类
1)标准库
2)开源模块
3)自定义模块
2、 python时间处理之time模块及datetime模块
(1)Python中时间的常用表示方法
1)时间戳
2)字符串时间
3)元组中九个元素
(2)time模块的用法(可以使用help(time)查看)
import time print(time.time()) #时间戳 print(time.ctime()) #返回当前时间的字符串格式 print(time.ctime(time.time()-6700)) #打印当前时间戳减6700后的时间 time.asctime() #把元组转换成字符串时间格式不传参数是默人传当前时间 time_obj = time.gmtime() #分将时间转换成UTC时间(元组的形式) print(time_obj.tm_year,time_obj.tm_mon) #分别打印需要的时间值 #字符串拼接打印 print("{year}-{m}-{day}".format(year=time_obj.tm_year,m=time_obj.tm_mon,day =time_obj.tm_mday)) print(time.localtime()) #打印本地时间(组的形式) print(time.mktime(time_obj)) #把时间对象转化成时间戳,里面必须传参数 #将时间延迟4秒钟#将struct_time格式转化成字符串格式(时间元组的形式转化成字符串,顺序可以调整) print(time.sleep(4)) tm = time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) print(tm) #将字符串格式转化成struct-time格式(时间字符串格式转化成元组形式,位置与后面位置一一对应) print(time.strptime("2016-12-13","%Y-%m-%d") )
(3)datetime模块的用法
import time import datetime print(datetime.date.today()) #打印当前的日期 print(datetime.date.fromtimestamp(time.time()-864008)) #打印当前时间的时间戳减去864008的日期 current_time = datetime.datetime.now() #打印当前时间的详细时间,包括毫秒 print(current_time) print(current_time.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() + datetime.timedelta(hours=10) ) #比现在加10小时 print(current_time.replace(2010)) #将现在的时间替换为2010,10,10 print(datetime.datetime.strptime("21/11/06 16:00", "%d/%m/%y %H:%M"))
3、随机数字模块
(1)作用:用于生成随机数字
(2)随机数字模块的使用(help(random))
import random #引入随机数字模块 print(random.randint(0,99)) #随机打印指定范围内整数 print(random.randrange(0.100)) #打印指定范围内的整数,顾头不顾尾 print(random.randrange(0,100,2)) #取偶数 print(random.choice(‘abcdefhi&*([A‘)) #随机打印指定字符 print(random.sample(‘abcdefhi&*([A‘,3)) #打印指定个数的字符,一列表形式打印
(3)随机数字模块的使用之生成6位随机验证码
import random li = [] for i in range(6): r = random.randrange(0,5) if r == 2 or r == 4: num = random.randrange(0, 10) li.append(str(num)) else: temp = random.randrange(65, 91) c = chr(temp) li.append(c) result = "".join(li) print(result)
4、os模块的使用
(1)作用:Python标准库中用于访问操作系统功能的模块,os模块提供了一种可移植的方法使用操作系统。使用os模块中提供的接口,可以实现扩平台访问。
(2)功能
功能 |
作用 |
os.getcwd() |
获取当前工作目录,即当前python脚本工作的目录路径 |
os.chdir("dirname") |
改变当前脚本工作目录;相当于shell下cd |
os.curdir |
返回当前目录: (‘.‘) |
os.pardir |
获取当前目录的父目录字符串名:(‘..‘) |
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.stat(‘path/filename‘) |
获取文件/目录信息 |
os.sep |
操作系统特定的路径分隔符,win下为"\\",Linux下为"/" |
os.linesep |
当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" |
os.pathsep |
用于分割文件路径的字符串 |
os.name |
字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘ |
os.system("bash command") |
运行shell命令,直接显示 |
os.environ |
获取系统环境变量 |
os.path.abspath(path) |
返回path规范化的绝对路径 |
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.exists(path) |
如果path存在,返回True;如果path不存在,返回False |
os.path.isabs(path) |
如果path是绝对路径,返回True |
os.path.isfile(path) |
如果path是一个存在的文件,返回True。否则返回False |
os.path.isdir(path) |
如果path是一个存在的目录,则返回True。否则返回False |
os.path.join(path1[, path2[, ...]]) |
将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 |
os.path.getatime(path) |
返回path所指向的文件或者目录的最后存取时间 |
os.path.getmtime(path) |
返回path所指向的文件或者目录的最后修改时间 |
(3)用法
import os print(os.getcwd()) # 获取当前目录 os.chdir("C:\\Users") # 切换目录,U前要加转义符"\"或者写成os.chdir(r"C:\Users") print(os.getcwd()) print(os.curdir) # 获取当前目录 print(os.pardir) #获取当前目录的父目录 os.makedirs(r"C:\a\b\c\d") #递归创建目录 os.removedirs(r"C:\a\b\c\d") #目录为空则删除,递归到上一次目录,若为空则删除,以此类推 # os.mkdir(r‘D:\a‘) #创建单个目录 # os.mkdir(r‘D:\a\b‘) # os.rmdir(r‘D:\a\b‘) #删除单个目录 print(os.listdir(r‘D:‘)) #列出目录下的内容,以列表的形式显示 print(os.stat(r‘D:\hello.py‘)) #列出文件的属性 print(os.sep) #输出当前目录的分隔符 print(os.linesep) #输出当前平台的行终止符,win下为“\t\n”,linux下为“\n” print(os.pathsep) print(os.environ) #c查看当前系统的环境变量,以字典形式显示 print(os.name) #输出字符串指示系统的名称,Linux为‘poxis‘windows为‘nt‘ # os.system(‘ipconfig/all‘) #调用系统命令 print(os.path.abspath(‘.‘)) #获取文件的绝对路劲 print(os.path.split(r‘D:\python.py‘)) #将文件名和目录名分割,放入元组中 print(os.path.dirname(r‘D:\python.py‘)) #取目录名 print(os.path.basename(r‘D:\python.py‘)) #取文件名 print(os.path.exists(r‘D:‘)) #判断输入的目录是否存在 print(os.path.isabs(r‘D:\a‘)) #判断输入的是不是一个绝对路径,不能直接跟根目录 print(os.path.isfile(r‘D:\hello.py‘)) #判断是不是文件 print(os.path.isdir(r‘D:\python.py‘)) #判断是不是目录 print(os.path.join(r‘D‘,r‘hello.py‘)) #将多个路劲组合返回 print(os.path.getatime(r‘D:\hello.py‘)) #返回指定文件或目录的最后存取时间(时间戳形式) print(os.path.getmtime(r‘D:\hello.py‘)) #返回指定文件或目录的最后修改时间(时间戳形式)
(4)将自己写的模块加入到系统的坏境变量中
import os import sys path1 = os.path.abspath(__file__) #获取当前文件所在完整路径 print(path1) path2 = os.path.dirname(path1) #获取当前文件父目录 print(path2) path3 = os.path.dirname(path2) print(path3) print(sys.path) sys.path.insert(0,path3) #将当前包目录加入到python环境变量中 print(sys.path) #相当于 #sys.path.insert(0,os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
5、Shutil模块
(1)作用:shutil模块提供了大量的文件的高级操作,特别针对文件的拷贝和删除,主要功能为目录和文件操作以及压缩操作。
(2)删除、拷贝应用
import shutil f1 = open("hehe",encoding="utf-8") f2 = open("hehe2","w",encoding="utf-8") # shutil.copyfileobj(f1,f2) #拷贝文件操作 #移动删除操作 shutil.copyfile("hehe2","hehe3") #copy文件 shutil.copystat("hehe","hehe3") #copy文件属性 # shutil.copytree("day5","dayi") #copy目录 # shutil.rmtree("day5") #删除目录 shutil.move("hehe3","dayi123") #移动文件"hehe3"到dayi123
(3)压缩解压用法:
1)用法:shutil.make_archive(base_name, format,...)
2)参数说明:
base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir:要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象
3)压缩解压使用
import shutil import os #将”D:/python”打包到“D/py.tar.gz” shutil.make_archive("D:/py",‘gztar‘,root_dir="D:/python") print(os.listdir(r‘D:/‘))
(3)shutil 对压缩包的处理是调用ZipFile 和 TarFile 两个模块来进行的
1)使用zipfile压缩
import zipfile z = zipfile.ZipFile(‘dayi123.zip‘,‘w‘) #以写方式打开dayi123.zip不存在时则创建 z.write(‘hehe‘) #将文件hehe放入压缩文件 z.write(‘hehe2‘) #将文件hehe2放入压缩文件 z.close() #关闭dayi123.zip
2)使用zipfile解压
import zipfile z = zipfile.ZipFile(‘dayi123.zip‘,‘r‘) #以只读方式打开 z.extractall() #将里面所有内容都解压 z.close()
6、Json及pickle模块
(1)作用:将数据类型转化成字符串或将字符串转化成基本的数据类型:json(各语言通用)及pickle(只适合Python)
(2)json模块
1)将Python的数据类型转化成字符串:
import json dic = {‘name‘:‘dayi123‘} print(dic,type(dic)) result = json.dumps(dic) #将Python的数据类型转化成字符串形式,dump为序列化 print(result,type(result))
2)将字符串转化成基本的数据类型:
import json s1 = ‘{"k1":123}‘ print(type(s1)) #将Python字符串转化成基本数据类型,单基本数据类型要保持一致,loads为反序列化 result = json.loads(s1) print(type(result)
3)应用举例:基于天气的API获取天气相关JSON数据
import requests import json response = requests.get(‘http://wthrcdn.etouch.cn/weather_mini?city=北京‘) response.encoding = ‘utf-8‘ print(response.text) dic = json.loads(response.text) #将获取到的天气数据转换成列表 print(type(dic))
4)Json.dump():将列表转化成字符串,并写到另一个文件中:
import json li = [23,"dayi123",‘hello‘,"ok"] json.dump(li,open(‘json_dump‘,‘w‘)) #json.dump()将列表转化为字符串并写入文件中
5)json.load():读取文件中的数据,并转化成列表
import json li = json.load(open(‘json_dump‘,‘r‘)) print(type(li))
(2)pickle模块
1)概述:pickle用法同json用法,Pickle支持的数据类型比json多,可以对Python的复杂数据类型做操作,更适合于所有类型的序列化,但json仅适用于Python。json更加适合跨语言,适合于基本的数据类型序列化。
2)用法:
import pickle li = [11,22,33] r = pickle.dumps(li) #将列表转化成字节的方式字符串 print(r, type(r)) result = pickle.loads(r) #读取r字符串中的数据 print(result) pickle.dump(li, open(‘db‘, ‘wb‘)) #将列表转化成特殊的方式存放在文件中 w = pickle.load(open(‘db‘, ‘rb‘)) #读取文件中的数据 print(w)
7、Shelve模块使用
(1)作用:shelve类似于一个key-value数据库,可以很方便的用来保存python的内存对象,其内部使用pickle来序列化数据,使用shelve可以将一个列表、字典、或者用户自定义的类实例保存到shelv中,下次需要时直接去出来,就是Python一个内存对象,不需要像传统数据库一样,先取出数据,然后用这些数据构造一遍所需要的对象。
(2)用法
import shelve import datetime d = shelve.open(‘shelve_test‘) # 打开一个文件 print(d.get("name")) print(d.get("info")) print(d.get("date")) # info = {‘age‘:22,"job":‘it‘} # # name = ["alex", "rain", "test"] # d["name"] = name # 持久化列表 # d["info"] = info # 持久dict # d[‘date‘] = datetime.datetime.now() # d.close()
8、configparser模块
(1)作用:用于生成和修改常见配置文档
(2)生成配置:
import configparser config = configparser.ConfigParser() config["DEFAULT"] = {‘ServerAliveInterval‘: ‘45‘, ‘Compression‘: ‘yes‘, ‘CompressionLevel‘: ‘9‘} config[‘bitbucket.org‘] = {} config[‘bitbucket.org‘][‘User‘] = ‘hg‘ config[‘topsecret.server.com‘] = {} topsecret = config[‘topsecret.server.com‘] topsecret[‘Host Port‘] = ‘50022‘ # mutates the parser topsecret[‘ForwardX11‘] = ‘no‘ # same here config[‘DEFAULT‘][‘ForwardX11‘] = ‘yes‘ with open(‘example.ini‘, ‘w‘) as configfile: config.write(configfile)
(3)读取配置中的内容:
import configparser config = configparser.ConfigParser() config.read(‘example.ini‘) #读取example.ini文件 print(config.sections()) #打印除过“default”项外的其他选项 print(config.defaults()) #打印default选项及下面内容 print(config[‘bitbucket.org‘][‘user‘]) #读取‘bitbucket.org‘下的‘user‘的值 print(config[‘DEFAULT‘][‘Compression‘]) #读取‘DEFAULT‘中‘Compression‘的值 print(‘bitbucket.org‘in config)#判断‘bitbucket.org‘是否存在于example.ini中 for key in config[‘bitbucket.org‘]: #循环读取config中的key print(key)
9、python模块之加密模块hashlib
(1)作用:用于加密相关的操作,代替了md5模块和sha模块,主要提供SHA1,SHA224, SHA256, SHA384, SHA512 ,MD5 算法
(2)基本用法:
import hashlib hash = hashlib.md5() # help(hash.update) hash.update(bytes(‘admin‘,encoding=‘utf-8‘)) print(hash.hexdigest())
(3)加密算法的缺陷及解决办法:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。
import hashlib hash = hashlib.md5(bytes(‘898oaFs09f‘,encoding="utf-8")) hash.update(bytes(‘admin‘,encoding="utf-8")) print(hash.hexdigest())
(4)python内置还有一个 hmac 模块,它内部对我们创建 key和内容进行进一步的处理然后再加密
import hmac h =hmac.new(bytes(‘898oaFs09f‘,encoding="utf-8")) h.update(bytes(‘admin‘,encoding="utf-8")) print(h.hexdigest())