本节大纲:
- 模块介绍
- time &datetime模块
- random
- os
- sys
- shutil
- json & picle
- shelve
- configparser
- 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模块
1 import time 2 3 #时间戳 4 print(time.time()) #返回当前时间的时间戳 5 6 #元组的形式 7 print(time.gmtime())#返回格林威治0时区的时间 8 # time.struct_time(tm_year=2018, tm_mon=4, tm_mday=17, tm_hour=15, 9 # tm_min=34, tm_sec=6, tm_wday=1, tm_yday=107, tm_isdst=0) 10 print(time.gmtime().tm_year) #可以根据元素的关系取出对应的时间 11 print(time.localtime()) #也是元组的形式 12 13 #将元组形式转换成时间戳 14 15 now = time.localtime() 16 print(time.mktime(now)) 17 18 #将元组形式转换成指定的字符串格式 19 20 now1 = time.localtime() 21 print(time.strftime('%Y-%m-%d %H:%M:%S',now1)) 22 23 #将自定义的字符串格式转换为元组的形式 24 25 print(time.strptime('2016-07-08','%Y-%m-%d')) 26 27 time.sleep(2) #睡两秒 28 29 m = time.time() #当前时间的时间戳 30 n = time.gmtime() #返回的是时间的元组形式,传入时间戳参数可以将时间戳转换成元组 31 n1 = time.gmtime().tm_year #可以通过对应的元素来取得对应的时间信息 32 l = time.localtime() #返回当前本地时间的元组形式,将时间搓传入 33 l1 = time.localtime(m) #传入参数也可以返回对应时间的元组形式 34 c = time.mktime(n) #将元组转换为时间戳 35 s = time.strftime("%Y-%m-%d %H-%M-%S") #以一定的格式输出时间 36 s2 = time.strftime("%Y-%m-%d %H-%M-%S",n) #后面如果接参数则必须是元组的形式 37 p = time.strptime("2018-03-01","%Y-%m-%d") #将时间转换成元组的形式 38 print(s2)
datetime
1 import datetime 2 3 # print(datetime.datetime.today()) 默认返回当前日期和时间的对象,也可以自定义日期和时间 4 # print(datetime.date.today()) 默认返回当前日期的对象,也可以自定义日期 5 6 # print(datetime.datetime.now()) 返回当前时间 7 8 today = datetime.datetime.today() 9 print(today) 10 11 print(today.strftime("%I:%M:%S %p %d/%m/%Y")) #自定义格式化时间 12 print(today.timetuple()) #将时间转换成元组的形势 13 print(today.replace(1949,10,1)) #返回一个替换后的date对象 14 15 yesterday = today - datetime.timedelta(days=1) #对(days)天,(hours)小时,(minutes)分进行运算 16 print(yesterday)
random模块
1 import random 2 3 print(random.random()) #生成一个0-1 的随机数 4 print(random.randint(1,7)) #s生成一个指定范围的的随机整数,两边都是闭区间 5 print(random.randrange(1,3)) #生成一个指定范围的随机整数,左闭右开
下面是一个random的简单应用:
1 ''' 2 这是一个生成随机验证码的简单程序 3 ''' 4 import random 5 checkcode='' 6 for i in range(6): 7 current = random.randint(1,6) 8 if i == current: #若两个数相等,用ASII返回一个字母 9 temp = chr(random.randint(65,90)) 10 else: #若不相等返回数字,并转换为字符串 11 temp = random.randint(1,9) 12 checkcode += str(temp) #字符串拼接 13 print(checkcode)
os模块
1 import os 2 3 print(os.getcwd()) #获取当前的工作目录 4 #os.chdir('dirname')改变当前脚本的工作目录,相当于shell的cd 5 print(os.curdir) #返回当前目录 6 print(os.pardir) #返回当前目录的父目录字符串名 7 #os.makedirs('a/b/c') #可以生成多层递归目录 8 #os.removedirs(r'G:\PythonLearning\oldboy\oldboynotes\fiveday\osmodle\a\b\c') 9 #若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 10 #os.mkdir('a') #生成单级目录 11 #os.rmdir(r'G:\PythonLearning\oldboy\oldboynotes\fiveday\osmodle\a') 12 #删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdirdirname 13 #print(os.listdir(r'G:\PythonLearning\oldboy\oldboynotes\fiveday\osmodle\a')) 14 #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 15 #os.remove(r'G:\PythonLearning\oldboy\oldboynotes\fiveday\osmodle\a\1') 16 #删除指定的文件 17 #os.rename('oldname','newname') 重命名文件/目录 18 #print(os.stat('G:')) 获取文件或目录的信息 19 #print(os.sep) 输出操作系统指定的路径分隔符 20 # print(os.linesep) 输出当前平台使用的行终止符,即换行符 21 # print(os.pathsep) 输出用于分割文件路径的字符串,一般为; 22 # print(os.name) 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' 23 #print(os.environ) #获取系统的环境变量 24 #print(os.path.abspath(__file__)) #返回path规范化的绝对路径 25 #print(os.path.split(__file__)) #将path分割成目录和文件名二元组返回 26 #print(os.path.dirname(__file__)) #返回path的目录。其实就是os.path.split(path)的第一个元素 27 #print(os.path.basename(__file__)) #返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 28 #print(os.path.exists(__file__)) #如果path存在,返回True;如果path不存在,返回False 29 # os.path.isabs(path) #如果path是绝对路径,返回True 30 # os.path.isfile(path) #如果path是一个存在的文件,返回True。否则返回False 31 # os.path.isdir(path) #如果path是一个存在的目录,则返回True。否则返回False 32 # os.path.join(path1[, path2[, ...]]) #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 33 # os.path.getatime(path) #返回path所指向的文件或者目录的最后存取时间 34 # os.path.getmtime(path) #返回path所指向的文件或者目录的最后修改时间
sys模块
1 import sys 2 print(sys.path) #打印环境变量,返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 3 4 #sys.path.append() 将以路径添加至环境变量 5 #print(sys.argv) 打印程序本身的路径 6 '''sys.exit() 7 print('a')''' #sys.exit()表示正常退出程序,正常退出后,后面不运行 8 9 #print(sys.version) 获取解释器的版本值 10 #print(sys.platform) #返回操作系统平台名称 11 # sys.stdout.write('please') 12 # sys.stdout.write('you') 标准输出,不换行
json和picle模块
json:用于字符串和python数据类型直接转换
picle:用于python特有的类型和python的数据类型转换
json和picle的方法和用法一致只不过功能稍微不同:dump,load,dumps,loads
1 import json 2 3 di={"json":1,"picle":2} 4 js = json.dumps(di) #dumps将python的数据类型转换为所有语言都识别的字符串 5 print(type(js)) 6 with open("a.txt","w") as fp: 7 json.dump(di,fp) #dump则是将python的数据类型转换为所有语言都识别的字符串,并且必须写入文件 8 print(js) 9 10 import pickle 11 12 pi = pickle.dumps(di) #dumps将python的数据类型转换为所有语言都识别的二进制字符串模式 13 print(type(pi)) 14 15 with open("b.txt","w") as fp2: 16 pickle.dump(pi,fp2) #dump则是将python的数据类型转换为所有语言都识别的二进制字符串,必须写入文件 17 print(pi)
反序列化操作
1 f = open("a.txt","r") 2 a = f.read() #直接读取内容 3 print(json.loads(a)["json"]) #然后对其反序列化操作 4 f2 = open("a.txt","r") 5 print(json.load(f2)) #对文件描述符进行反序列化操作
shutil和zipfile模块
1 import shutil 2 3 #f = open('a',encoding='utf-8') 4 # f.write('这一个关于复制的模块') 5 # f2 = open('b','w',encoding='utf-8') 6 # shutil.copyfileobj(f,f2) #对文件里的内容进行拷贝,文件对象 7 # shutil.copyfile('a','c') #直接对文件进行拷贝,文件名 8 # shutil.copystat('b','c') #拷贝状态的信息,包括:mode bits, atime, mtime, flags 9 # #shutil.copytree('timemodle','d') #递归的去拷贝文件 10 #hutil.rmtree('d') #递归删除文件 11 #shutil.move() #递归移动文件 12 #shutil.make_archive('shutilmodle','zip',r'G:\PythonLearning') #对文件进行压缩 13 14 import zipfile 15 16 z = zipfile.ZipFile('a.zip','w') #压缩 17 z.write('a') 18 print('---') 19 z.write('b') 20 z.close() 21 22 z = zipfile.ZipFile('a.zip','r') #解压 23 z.extractall() 24 z.close()
shelve模块
1 #shelve模块是一个简单的k,v将内存数据通过文件持久化的模块, 2 # 可以持久化任何pickle可支持的python数据格式,字典,列表,类等 3 import shelve,datetime 4 5 d = shelve.open('shelvet') 6 7 info = {'age':22,'job':'it'} 8 name = ['wallace','alex'] 9 date = datetime.date.today() 10 11 d['info']=info 12 d['name'] = name 13 d['date'] = date 14 print(d.get('info')) 15 d.close()
configparser模块
该模块用于生成和修改配置文件
1 import configparser 2 3 config = configparser.ConfigParser() 4 config["DEFAULT"] = {'ServerAliveInterval': '45', 5 'Compression': 'yes', 6 'CompressionLevel': '9'} 7 8 config['bitbucket.org'] = {} 9 config['bitbucket.org']['User'] = 'hg' 10 config['topsecret.server.com'] = {} 11 topsecret = config['topsecret.server.com'] 12 topsecret['Host Port'] = '50022' # mutates the parser 13 topsecret['ForwardX11'] = 'no' # same here 14 config['DEFAULT']['ForwardX11'] = 'yes' 15 with open('example.ini', 'w') as configfile: 16 config.write(configfile)
获取文档内的内容
1 >>> import configparser 2 >>> config = configparser.ConfigParser() 3 >>> config.sections() 4 [] 5 >>> config.read('example.ini') 6 ['example.ini'] 7 >>> config.sections() 8 ['bitbucket.org', 'topsecret.server.com'] 9 >>> 'bitbucket.org' in config 10 True 11 >>> 'bytebong.com' in config 12 False 13 >>> config['bitbucket.org']['User'] 14 'hg' 15 >>> config['DEFAULT']['Compression'] 16 'yes' 17 >>> topsecret = config['topsecret.server.com'] 18 >>> topsecret['ForwardX11'] 19 'no' 20 >>> topsecret['Port'] 21 '50022' 22 >>> for key in config['bitbucket.org']: print(key) 23 ... 24 user 25 compressionlevel 26 serveraliveinterval 27 compression 28 forwardx11 29 >>> config['bitbucket.org']['ForwardX11'] 30 'yes'
修改文档
1 [section1] 2 k1 = v1 3 k2:v2 4 5 [section2] 6 k1 = v1 7 8 import ConfigParser 9 10 config = ConfigParser.ConfigParser() 11 config.read('i.cfg') 12 13 # ########## 读 ########## 14 #secs = config.sections() 15 #print secs 16 #options = config.options('group2') 17 #print options 18 19 #item_list = config.items('group2') 20 #print item_list 21 22 #val = config.get('group1','key') 23 #val = config.getint('group1','key') 24 25 # ########## 改写 ########## 26 #sec = config.remove_section('group1') 27 #config.write(open('i.cfg', "w")) 28 29 #sec = config.has_section('wupeiqi') 30 #sec = config.add_section('wupeiqi') 31 #config.write(open('i.cfg', "w")) 32 33 34 #config.set('group2','k1',11111) 35 #config.write(open('i.cfg', "w")) 36 37 #config.remove_option('group2','age') 38 #config.write(open('i.cfg', "w"))
hashlib模块
该模块主要用于对文档内容进行加密计算
1 import hashlib 2 3 '''md5,SHA1, SHA224, SHA256, SHA384, SHA512 4 不同的算法加密程度不同''' 5 6 m = hashlib.sha512() 7 m.update(b'hello') 8 m.update('汪冠涛'.encode('utf-8')) #中文时必须先对其转码为unicode 9 print(m.digest()) 10 m.update(b"it's be long time since last time...") 11 print(m.digest()) 12 print(m.hexdigest())
1 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' 2 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' 3 bce094f582a0690003bdd5dfa07ed1d01b4435da4a5f12cb3ef94837291fe5b8f5b4969db51c155acc37c91cd8dd9289b292411433015852bb1ac5f8a23e64e2