模块基础
一、模块定义及分类
把常用的一些功能单独放置到一个文件中,方便其他文件来调用,这样的一个文件可以称为一个模块。
模块分为三种:
- 自定义模块
- 内置标准模块(又称标准库)
- 开源模块
导入模块:
import module from module.xx.xx import xx from module.xx.xx import xx as rename from module.xx.xx import *
1、自定义模块:
自己定义一个模块命名demo.py:

在test.py中引入模块:

然后运行test.py,就会输出和demo.py同样的结果。
注:
只有在同一个文件夹中才能成功导入,如果想在所有文件夹中导入,需要获取模块路径再添加到库里面
import sys print sys.path #打印结果:D:\myProgram\Python35\python.exe E:/Python-study/mdtest/demo.py
sys.path.append("E:/Python-study/mdtest/demo.py")
print(sys.path)
#打印结果:['E:\\Python-study\\mdtest', 'E:\\Python-study', 'D:\\myProgram\\Python35\\python35.zip', 'D:\\myProgram\\Python35\\DLLs', 'D:\\myProgram\\Python35\\lib', 'D:\\myProgram\\Python35', 'D:\\myProgram\\Python35\\lib\\site-packages', 'E:/Python-study/mdtest/demo.py']
此时已经将自定义模块添加到库当中,这样就可以在其他文件夹中成功导入:
from mdtest import demo
若要删除:
sys.path.remove("E:/Python-study/mdtest/demo.py")
print(sys.path)
或者直接将demo直接复制到自己的Python中:Python35\Lib\site-packages
site-packages:存放所有第三方安装的模块
2、内置标准模块
-
time模块
#导入time模块 import time
time.time():返回当前时间戳(时间戳指1970年1月1日之后的秒)
print(time.time()) #打印结果:1463641304.0342803
time.ctime():当前系统时间
print(time.ctime()) #打印结果:Thu May 19 15:08:30 2016 #当前时间减去一天的时间(一天=86400) print(time.ctime(time.time()-86400)) #打印结果:Thu May 18 15:08:30 2016
time.gmtime():将当前时间戳转换成struct_time格式
print(time.gmtime()) #打印结果:time.struct_time(tm_year=2016, tm_mon=5, tm_mday=19, tm_hour=7, tm_min=12, tm_sec=36, tm_wday=3, tm_yday=140, tm_isdst=0
time.localtime():将当地时间转换成struct_time格式
print(time.localtime()) #打印结果:time.struct_time(tm_year=2016, tm_mon=5, tm_mday=19, tm_hour=15, tm_min=14, tm_sec=0, tm_wday=3, tm_yday=140, tm_isdst=0)
time.mktime():将struct_time格式转成当地时间戳格式
print(time.mktime(time.localtime())) #打印结果:1463642192.0
time.sleep():延迟
print("计时5秒")
time.sleep(5)#延迟
print("计时结束")
#延时效果无法展示,只能自己动手操作
time.strftime():将struct_time格式转换成指定的字符串格式
print(time.strftime('%Y-%m-%d %H:%M:%S'))
#打印结果:2016-05-19 15:21:38
#将时间戳转换成指定的字符串格式
print(time.strftime('%Y-%m-%d %H:%M:%S',time.gmtime()))
#打印结果:2016-05-19 07:22:58
#将当地时间以struct_time格式转换成指定的字符串格式
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
#打印结果:2016-05-19 15:23:13
time.strptime():将字符串格式转换成struct_time格式
print(time.strptime("2016-05-17","%Y-%m-%d")
#打印结果:time.struct_time(tm_year=2016, tm_mon=5, tm_mday=17, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=138, tm_isdst=-1) time.struct_time(tm_year=2016, tm_mon=5, tm_mday=19, tm_hour=7, tm_min=32, tm_sec=30, tm_wday=3, tm_yday=140, tm_isdst=0)
-
datetime模块
datetime的分类:
datetime.date : 表示日期的类(year,month,day)
datetime.time : 表示时间的类(hour,minute,second,microsecond)
datetime.datetime : 表示日期时间
datetime.timedelta:表示时间间隔
#导入datetime模块 import datetime
datetime.date.today():当天时间,格式:2016-05-19
print(datetime.date.today()) #打印结果:2016-05-19
datetime.date.formtimestamp():将当前系统时间(时间戳)以日期格式呈现
print(datetime.date.fromtimestamp(time.time())) #打印结果:2016-05-19
datetime.datetime.now():当前日期时间
ret_time = datetime.datetime.now() print(ret_time) #输出字符串形式的当前时间 print(ret_time.timetuple()) #返回struct_time格式 print(ret_time.replace(2014,10,1))#替换日期 #打印结果: 2016-05-19 16:22:23.804101 time.struct_time(tm_year=2016, tm_mon=5, tm_mday=19, tm_hour=16, tm_min=22, tm_sec=23, tm_wday=3, tm_yday=140, tm_isdst=-1) 2014-10-01 16:22:23.804101
datetime.datetime.strptime():将字符串转换成日期时间格式
str_to_date = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
print(str_to_date)
#打印结果:2006-11-21 16:30:00
datetime.datetime.timedelta():取时间长度
#在当前时间基础上增加10天 new_date = datetime.datetime.now() + datetime.timedelta(days=10) print(new_date) #打印结果:2016-05-29 16:31:00.617860 #减去10天:datetime.timedelta(days=-10) #减去10小时:datetime.timedelta(hours=-10) #减去10秒:datetime.timedelta(seconds=-10)
-
sys模块
用于提供对Python解释器相关的操作:
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 sys.stdin 输入相关 sys.stdout 输出相关 sys.stderror 错误相关
常用函数:
返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值:sys.path()
import sys import time for i in range(31): sys.stdout.write("\r") sys.stdout.write("%s%% | %s" % (int(i/30*100),int(i/30*100)*'*')) sys.stdout.flush() time.sleep(0.1) 进度条
-
pickle模块
pickle模块提供了四个功能:dumps、dump、loads、load
pickle.dumps(obj): 把任意对象序列化成一个str,然后把这个str写入文件
pickle.loads(string): 反序列化出对象
pickle.dump(obj,file):直接把对象序列化后写入文件
pickle.load(file):从文件中反序列化出对象
购物练习:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pickle
accounts = {
1000: {
'name':'USERA',
'email': 'lijie3721@126.com',
'passwd': 'abc123',
'balance': 15000,
'phone': 13651054608,
'bank_acc':{
'ICBC':14324234,
'CBC' : 235234,
'ABC' : 35235423
}
},
1001: {
'name': 'USERB',
'email': 'caixin@126.com',
'passwd': 'abc145323',
'balance': -15000,
'phone': 1345635345,
'bank_acc': {
'ICBC': 4334343,
}
},
}
#把字典类型写入到文件中
f = open('accounts.db','wb')
f.write(pickle.dumps(accounts))
f.close()
#2,反序列出对象并修改其内容,并将修改内容重新写入文件
file_name = "accounts.db"
f = open(file_name,'rb')
account_dic = pickle.loads(f.read())
f.close()
account_dic[1000]['balance'] -= 500
f = open(file_name,'wb')
f.write(pickle.dumps(account_dic))
f.close()
#3,反序列化对象并查看其内容
f = open('accounts.db','rb')
acountdb = pickle.loads(f.read())
print(acountdb)
dic = {
'k1': [1,2],
'k2': [3,4]
}
#1.将对象写入文件
f = open('test','wb')
pickle.dump(dic,f)
f.close()
#2.将文件中内容反序列化,并读出
f = open('test','rb')
dic2 = pickle.load(f)
print(dic2)
f.close()
-
hashlib模块
用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
import hashlib
# ######## md5 ########
hash = hashlib.md5()
# help(hash.update)
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
print(hash.digest())
######## sha1 ########
hash = hashlib.sha1()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
# ######## sha256 ########
hash = hashlib.sha256()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
# ######## sha384 ########
hash = hashlib.sha384()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
# ######## sha512 ########
hash = hashlib.sha512()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
以上加密算法虽然已经很厉害,但还是存在缺陷,通过撞库可以反解。所有,有需要对加密算法中添加自定义key再进行加密。
import hashlib
hash = hashlib.md5(bytes("jiami",encoding="utf-8"))
hash.update(bytes("3.1415926",encoding="utf-8"))
print(hash.hexdigest())
练习:
def md5(arg):
ooo = hashlib.md5(bytes("jiami",encoding="utf-8"))
ooo.update(bytes(arg,encoding="utf-8"))
return ooo.hexdigest()
def login(user,pwd):
with open("db","r",encoding="utf-8") as f:
for line in f:
u,p = line.strip().split("|")
if u == user and p == md5(pwd):
return True
def refister(user,pwd):
with open("db","a",encoding="utf-8") as f:
temp = user + "|" + md5(pwd)
f.write(temp)
i = input("1,登录;2,注册")
if i == "2":
user = input("用户名:")
pwd = input("密码:")
refister(user,pwd)
elif i== "1":
user = input("用户名:")
pwd = input("密码:")
r = login(user,pwd)
if r:
print("登录成功")
else:
print("登录失败")
-
os模块
用于提供系统级别的操作:
1 import os
2
3 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
4 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
5 os.curdir 返回当前目录: ('.')
6 os.pardir 获取当前目录的父目录字符串名:('..')
7 os.makedirs('dir1/dir2') 可生成多层递归目录
8 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
9 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
10 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
11 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
12 os.remove() 删除一个文件
13 os.rename("oldname","new") 重命名文件/目录
14 os.stat('path/filename') 获取文件/目录信息
15 os.sep 操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
16 os.linesep 当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
17 os.pathsep 用于分割文件路径的字符串
18 os.name 字符串指示当前使用平台。win->'nt'; Linux->'posix'
19 os.system("bash command") 运行shell命令,直接显示
20 os.environ 获取系统环境变量
21 os.path.abspath(path) 返回path规范化的绝对路径
22 os.path.split(path) 将path分割成目录和文件名二元组返回
23 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
24 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
25 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
26 os.path.isabs(path) 如果path是绝对路径,返回True
27 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
28 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
29 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
30 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
31 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
常用函数:
获取文件/目录信息:os.stat('path/filename')
import os
r = os.stat("E:\\Python-study")
print(r)
#打印结果:os.stat_result(st_mode=16895, st_ino=1688849860274247, st_dev=1816702834, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1464095097, st_mtime=1464095097, st_ctime=1464094748)
r = os.stat("E:\\Python-study")
print(r.st_size)
#打印结果:0
返回path的目录。其实就是os.path.split(path)的第一个元素:os.path.dirname(path)
如果path存在,返回True;如果path不存在,返回False:os.path.exists(path)
将多个路径组合后返回,第一个绝对路径之前的参数将被忽略:os.path.join(path1[,path2[,...]])

浙公网安备 33010602011771号