della0887 发表于 2018-8-14 13:16:39

Python中常用的模块

  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")
  改变当前脚本工作目录;相当于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 =
  
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 =
  
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())
页: [1]
查看完整版本: Python中常用的模块