Python中常用的模块

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")

改变当前脚本工作目录;相当于shellcd

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())