Python 全栈开发六 常用模块学习

时间:2022-04-02 05:50:06

本节大纲:

  1. 模块介绍
  2. time &datetime模块
  3. random
  4. os
  5. sys
  6. shutil
  7. json & picle
  8. shelve
  9. configparser
  10. hashlib

一、模块介绍

  模块的定义:在python中一个.py文件我们就可以称之为一个模块,python中有很多自带的模块我们叫内置模块,而我们自己创建的模块称之为自定义模块。模块可以被别的程序引入,以使用该模块中的函数等功能

  模块的导入:

# 方法一:
# import time
# 方法二:
from time import time
a = time()
print(a)
'''
以上两者的区别是:
第一种方法的导入的是模块的全部内容
第二种导入的是模块的其中一方法或属性
'''

所以在导入模块的时候需要根据需要来导入相应的内容,如果只用到模块内的其中一方法或属性尽量选择第二种导入方式,而需要用多个的时候为了减少代码量就选择第一种方式。当然import后面可以跟多个模块名。

二、time和datetime模块

在学习time模块之前我们学习一下time的一些属性。

索引(Index) 属性(Attribute) 值(Values)
0 tm_year(年) 比如2011
1 tm_mon(月) 1 - 12
2 tm_mday(日) 1 - 31
3 tm_hour(时) 0 - 23
4 tm_min(分) 0 - 59
5 tm_sec(秒) 0 - 61
6 tm_wday(weekday) 0 - 6(0表示周日)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为-1

time模块

 import time

 #时间戳
print(time.time()) #返回当前时间的时间戳 #元组的形式
print(time.gmtime())#返回格林威治0时区的时间
# time.struct_time(tm_year=2018, tm_mon=4, tm_mday=17, tm_hour=15,
# tm_min=34, tm_sec=6, tm_wday=1, tm_yday=107, tm_isdst=0)
print(time.gmtime().tm_year) #可以根据元素的关系取出对应的时间
print(time.localtime()) #也是元组的形式 #将元组形式转换成时间戳 now = time.localtime()
print(time.mktime(now)) #将元组形式转换成指定的字符串格式 now1 = time.localtime()
print(time.strftime('%Y-%m-%d %H:%M:%S',now1)) #将自定义的字符串格式转换为元组的形式 print(time.strptime('2016-07-08','%Y-%m-%d')) time.sleep(2) #睡两秒 m = time.time() #当前时间的时间戳
n = time.gmtime() #返回的是时间的元组形式,传入时间戳参数可以将时间戳转换成元组
n1 = time.gmtime().tm_year #可以通过对应的元素来取得对应的时间信息
l = time.localtime() #返回当前本地时间的元组形式,将时间搓传入
l1 = time.localtime(m) #传入参数也可以返回对应时间的元组形式
c = time.mktime(n) #将元组转换为时间戳
s = time.strftime("%Y-%m-%d %H-%M-%S") #以一定的格式输出时间
s2 = time.strftime("%Y-%m-%d %H-%M-%S",n) #后面如果接参数则必须是元组的形式
p = time.strptime("2018-03-01","%Y-%m-%d") #将时间转换成元组的形式
print(s2)

datetime

 import datetime

 # print(datetime.datetime.today()) 默认返回当前日期和时间的对象,也可以自定义日期和时间
# print(datetime.date.today()) 默认返回当前日期的对象,也可以自定义日期 # print(datetime.datetime.now()) 返回当前时间 today = datetime.datetime.today()
print(today) print(today.strftime("%I:%M:%S %p %d/%m/%Y")) #自定义格式化时间
print(today.timetuple()) #将时间转换成元组的形势
print(today.replace(1949,10,1)) #返回一个替换后的date对象 yesterday = today - datetime.timedelta(days=1) #对(days)天,(hours)小时,(minutes)分进行运算
print(yesterday)

random模块

 import random

 print(random.random())  #生成一个0-1 的随机数
print(random.randint(1,7)) #s生成一个指定范围的的随机整数,两边都是闭区间
print(random.randrange(1,3)) #生成一个指定范围的随机整数,左闭右开

下面是一个random的简单应用:

 '''
这是一个生成随机验证码的简单程序
'''
import random
checkcode=''
for i in range(6):
current = random.randint(1,6)
if i == current: #若两个数相等,用ASII返回一个字母
temp = chr(random.randint(65,90))
else: #若不相等返回数字,并转换为字符串
temp = random.randint(1,9)
checkcode += str(temp) #字符串拼接
print(checkcode)

os模块

 import os

 print(os.getcwd()) #获取当前的工作目录
#os.chdir('dirname')改变当前脚本的工作目录,相当于shell的cd
print(os.curdir) #返回当前目录
print(os.pardir) #返回当前目录的父目录字符串名
#os.makedirs('a/b/c') #可以生成多层递归目录
#os.removedirs(r'G:\PythonLearning\oldboy\oldboynotes\fiveday\osmodle\a\b\c')
#若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
#os.mkdir('a') #生成单级目录
#os.rmdir(r'G:\PythonLearning\oldboy\oldboynotes\fiveday\osmodle\a')
#删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdirdirname
#print(os.listdir(r'G:\PythonLearning\oldboy\oldboynotes\fiveday\osmodle\a'))
#列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
#os.remove(r'G:\PythonLearning\oldboy\oldboynotes\fiveday\osmodle\a\1')
#删除指定的文件
#os.rename('oldname','newname') 重命名文件/目录
#print(os.stat('G:')) 获取文件或目录的信息
#print(os.sep) 输出操作系统指定的路径分隔符
# print(os.linesep) 输出当前平台使用的行终止符,即换行符
# print(os.pathsep) 输出用于分割文件路径的字符串,一般为;
# print(os.name) 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
#print(os.environ) #获取系统的环境变量
#print(os.path.abspath(__file__)) #返回path规范化的绝对路径
#print(os.path.split(__file__)) #将path分割成目录和文件名二元组返回
#print(os.path.dirname(__file__)) #返回path的目录。其实就是os.path.split(path)的第一个元素
#print(os.path.basename(__file__)) #返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
#print(os.path.exists(__file__)) #如果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所指向的文件或者目录的最后修改时间

sys模块

 import sys
print(sys.path) #打印环境变量,返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 #sys.path.append() 将以路径添加至环境变量
#print(sys.argv) 打印程序本身的路径
'''sys.exit()
print('a')''' #sys.exit()表示正常退出程序,正常退出后,后面不运行 #print(sys.version) 获取解释器的版本值
#print(sys.platform) #返回操作系统平台名称
# sys.stdout.write('please')
# sys.stdout.write('you') 标准输出,不换行

json和picle模块

json:用于字符串和python数据类型直接转换

picle:用于python特有的类型和python的数据类型转换

json和picle的方法和用法一致只不过功能稍微不同:dump,load,dumps,loads

 import json

 di={"json":1,"picle":2}
js = json.dumps(di) #dumps将python的数据类型转换为所有语言都识别的字符串
print(type(js))
with open("a.txt","w") as fp:
json.dump(di,fp) #dump则是将python的数据类型转换为所有语言都识别的字符串,并且必须写入文件
print(js) import pickle pi = pickle.dumps(di) #dumps将python的数据类型转换为所有语言都识别的二进制字符串模式
print(type(pi)) with open("b.txt","w") as fp2:
pickle.dump(pi,fp2) #dump则是将python的数据类型转换为所有语言都识别的二进制字符串,必须写入文件
print(pi)

反序列化操作

 f = open("a.txt","r")
a = f.read() #直接读取内容
print(json.loads(a)["json"]) #然后对其反序列化操作
f2 = open("a.txt","r")
print(json.load(f2)) #对文件描述符进行反序列化操作

shutil和zipfile模块

 import shutil

 #f = open('a',encoding='utf-8')
# f.write('这一个关于复制的模块')
# f2 = open('b','w',encoding='utf-8')
# shutil.copyfileobj(f,f2) #对文件里的内容进行拷贝,文件对象
# shutil.copyfile('a','c') #直接对文件进行拷贝,文件名
# shutil.copystat('b','c') #拷贝状态的信息,包括:mode bits, atime, mtime, flags
# #shutil.copytree('timemodle','d') #递归的去拷贝文件
#hutil.rmtree('d') #递归删除文件
#shutil.move() #递归移动文件
#shutil.make_archive('shutilmodle','zip',r'G:\PythonLearning') #对文件进行压缩 import zipfile z = zipfile.ZipFile('a.zip','w') #压缩
z.write('a')
print('---')
z.write('b')
z.close() z = zipfile.ZipFile('a.zip','r') #解压
z.extractall()
z.close()

shelve模块

 #shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,
# 可以持久化任何pickle可支持的python数据格式,字典,列表,类等
import shelve,datetime d = shelve.open('shelvet') info = {'age':22,'job':'it'}
name = ['wallace','alex']
date = datetime.date.today() d['info']=info
d['name'] = name
d['date'] = date
print(d.get('info'))
d.close()

configparser模块

该模块用于生成和修改配置文件

 import configparser

 config = configparser.ConfigParser()
config["DEFAULT"] = {'ServerAliveInterval': '',
'Compression': 'yes',
'CompressionLevel': ''} config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Host Port'] = '' # mutates the parser
topsecret['ForwardX11'] = 'no' # same here
config['DEFAULT']['ForwardX11'] = 'yes'
with open('example.ini', 'w') as configfile:
config.write(configfile)

获取文档内的内容

 >>> import configparser
>>> config = configparser.ConfigParser()
>>> config.sections()
[]
>>> config.read('example.ini')
['example.ini']
>>> config.sections()
['bitbucket.org', 'topsecret.server.com']
>>> 'bitbucket.org' in config
True
>>> 'bytebong.com' in config
False
>>> config['bitbucket.org']['User']
'hg'
>>> config['DEFAULT']['Compression']
'yes'
>>> topsecret = config['topsecret.server.com']
>>> topsecret['ForwardX11']
'no'
>>> topsecret['Port']
''
>>> for key in config['bitbucket.org']: print(key)
...
user
compressionlevel
serveraliveinterval
compression
forwardx11
>>> config['bitbucket.org']['ForwardX11']
'yes'

修改文档

 [section1]
k1 = v1
k2:v2 [section2]
k1 = v1 import ConfigParser config = ConfigParser.ConfigParser()
config.read('i.cfg') # ########## 读 ##########
#secs = config.sections()
#print secs
#options = config.options('group2')
#print options #item_list = config.items('group2')
#print item_list #val = config.get('group1','key')
#val = config.getint('group1','key') # ########## 改写 ##########
#sec = config.remove_section('group1')
#config.write(open('i.cfg', "w")) #sec = config.has_section('wupeiqi')
#sec = config.add_section('wupeiqi')
#config.write(open('i.cfg', "w")) #config.set('group2','k1',11111)
#config.write(open('i.cfg', "w")) #config.remove_option('group2','age')
#config.write(open('i.cfg', "w"))

hashlib模块

该模块主要用于对文档内容进行加密计算

 import hashlib

 '''md5,SHA1, SHA224, SHA256, SHA384, SHA512
不同的算法加密程度不同''' m = hashlib.sha512()
m.update(b'hello')
m.update('汪冠涛'.encode('utf-8')) #中文时必须先对其转码为unicode
print(m.digest())
m.update(b"it's be long time since last time...")
print(m.digest())
print(m.hexdigest())
 b'i\xa4D\xf9\xa2\xc2\xb3}\x97U\xa9\xfc9\xcf_\xff}\xf1Ubq\xb4\xcb\xf9u\xed4I\xf6\xb23\x17\xcb\x93cjH[VP\x04\xe9)\x11\x1c\x06\xa0\xcc\xadN\xafd\xc7\xf4\rP\xd0\xbd\x93\xa98z\x84\xad'
b'\xbc\xe0\x94\xf5\x82\xa0i\x00\x03\xbd\xd5\xdf\xa0~\xd1\xd0\x1bD5\xdaJ_\x12\xcb>\xf9H7)\x1f\xe5\xb8\xf5\xb4\x96\x9d\xb5\x1c\x15Z\xcc7\xc9\x1c\xd8\xdd\x92\x89\xb2\x92A\x143\x01XR\xbb\x1a\xc5\xf8\xa2>d\xe2'
bce094f582a0690003bdd5dfa07ed1d01b4435da4a5f12cb3ef94837291fe5b8f5b4969db51c155acc37c91cd8dd9289b292411433015852bb1ac5f8a23e64e2