模块让你能够有逻辑地组织你的Python代码段。
把相关的代码分配到一个 模块里能让你的代码更好用,更易懂。
模块也是Python对象,具有随机的名字属性用来绑定或引用。
简单地说,模块就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。
模块分为三种:
- 自定义模块
- 内置模块 (又称标准库)
- 第三方模块 (又称第三方模块)
自定义模块:
也就是自己写的, 创建一个.py文件 自己实现一些功能 叫做自定义模块
导入模块:
Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用,如果想要使用模块,则需要导入。导入模块有一下几种方法:
Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用,如果想要使用模块,则需要导入。导入模块有一下几种方法: 当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块hello.py,需要把命令放在脚本的顶端: 一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。 import 文件名 Python的from语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下 例如,要导入模块zzz的xxx函数,使用如下语句: 这 个声明不会把整个zzz模块导入到当前的命名空间中, 它只会将zzz里的xxx单个引入到执行这个声明的模块的全局符号表。 from zzz import xxx 把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明: 这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。 from module.xx.xx import *
导入模块其实就是告诉Python解释器去解释那个py文件
- 导入一个py文件,解释器解释该py文件
- 导入一个包,解释器解释该包下的 __init__.py 文件
- 那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path
#!/usr/bin/env/python # -*- coding:utf-8 -*- import sys #获取给脚本传入的参数 print(sys.path) D:\python3.5\python.exe D:/untitled/python3/sys模块.py [‘D:\\untitled\\python3‘, ‘D:\\untitled‘, ‘D:\\python3.5\\python35.zip‘, ‘D:\\python3.5\\DLLs‘, ‘D:\\python3.5\\lib‘, ‘D:\\python3.5‘, ‘D:\\python3.5\\lib\\site-packages‘] Process finished with exit code 0
如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append(‘路径‘) 添加。
import sys sys.path.append(‘D:\\untitled\\python1\\day1.py‘) print(sys.path)
D:\python3.5\python.exe D:/untitled/python3/sys模块.py [‘D:\\untitled\\python3‘, ‘D:\\untitled‘, ‘D:\\python3.5\\python35.zip‘, ‘D:\\python3.5\\DLLs‘, ‘D:\\python3.5\\lib‘, ‘D:\\python3.5‘, ‘D:\\python3.5\\lib\\site-packages‘, ‘D:\\untitled\\python1\\day1.py‘] Process finished with exit code 0
还可以去往上下载安装模块 安装成功后,模块会自动安装到 sys.path 中的某个目录中,如:
/usr/lib/python2.7/site-packages/
site-packages 是存放第三方安装的模块
内置模块:
time 模块:
导入模块 import time print(time.time()) #返回当前系统时间戳 1970年Linux系统诞生到现在的秒数 执行结果: 1463843836.9476368 print(time.ctime()) #输出当前的系统时间 执行结果:Sat May 21 23:17:57 2016 print(time.ctime(time.time()-86400)) #将当前时间减一天转为字符串格式 执行结果:Fri May 20 23:19:53 2016 print(time.gmtime(time.time()-86400)) #将当前时间转换成_time格式 执行结果:time.struct_time(tm_year=2016, tm_mon=5, tm_mday=20, tm_hour=15, tm_min=21, tm_sec=43, tm_wday=4, tm_yday=141, tm_isdst=0) print(time.localtime(time.time()-86400)) #本地时间转换为strruct_time格式 执行结果:time.struct_time(tm_year=2016, tm_mon=5, tm_mday=20, tm_hour=23, tm_min=24, tm_sec=16, tm_wday=4, tm_yday=141, tm_isdst=0) print(time.mktime(time.localtime()))#于time.localtime()功能相反,将struct_time格式转回成当地时间戳格式 执行结果:1463844332.0 print(‘kaixin‘) time.sleep(4) #时间间隔4秒 print(‘gege‘) 执行结果 #操作一遍就明白了 kaixin gege print(time.strftime(‘%Y-%m -%d %H:%M:%S‘,time.gmtime())) #将struct_time格式转成指定的字符串格式 执行结果:2016-05 -21 15:31:32 print(time.strptime(‘2016-01-28‘,‘%Y-%m-%d‘)) #将字符串格式转换成struct_time格式 执行结果:time.struct_time(tm_year=2016, tm_mon=1, tm_mday=28, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=28, tm_isdst=-1)
import datetime
print(datetime.date.today()) #输出当前的日期 执行结果:2016-05-22 print(datetime.date.fromtimestamp(time.time()-84600))#-84600减一天 #输出前一天的时间 执行结果:2016-05-21 current_time = datetime.datetime.now() print(current_time) #输出 当前时间 执行结果:2016-05-22 00:15:15.434901 print(current_time.timetuple()) #输出返回struct_time格式 执行结果:time.struct_time(tm_year=2016, tm_mon=5, tm_mday=22, tm_hour=0, tm_min=15, tm_sec=15, tm_wday=6, tm_yday=143, tm_isdst=-1) print(current_time.replace(2015,10,10)) #输出2015-10-10的日期当前的时间 执行结果:2015-10-10 00:15:15.434901 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
new_data = datetime.datetime.now()+datetime.timedelta(days=10) print(new_data) #当前的日期加10天 new_data = datetime.datetime.now()+datetime.timedelta(days=-10) print(new_data) #当前的日期减10天 new_data = datetime.datetime.now()+datetime.timedelta(hours = 10) print(new_data) #当前时间-10小时 new_data = datetime.datetime.now()+datetime.timedelta(seconds = 120) print(new_data) #当前时间加120秒 执行结果 2016-06-01 00:09:36.236987 2016-05-12 00:09:36.236987 2016-05-22 10:09:36.236987 2016-05-22 00:11:36.236987
random 模块:
# import random 导入 随机模块, #验证码的操作 random.randint(1,99) #随机数字 temp = ‘‘ 定义一个空字付串 for i in range(6): 循环6次 q = random.randrange(0,4) 自动生成一个0-4的随机数 if q == 3 or q == 1: 如果随机数等于3 或 1就生成小写字母 c2 = random.randrange(0,10) 生成 0--10内的随机数 temp = temp + str(c2) 向变量中添加当前数字对应的ascii码的字符 else: c = random.randrange(65,91) 生成 65-91内的随机数 z = chr(c) temp = temp + z 向变量中添加当前数字对应的ascii码的字符 print(temp)
sys 模块:
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 错误相关
进度条:
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):从文件中反序列化出对象
import pickle accounts = { 1000: { ‘name‘:‘Alex LI‘, ‘email‘: ‘[email protected]26.com‘, ‘passwd‘: ‘abc123‘, ‘balance‘: 15000, ‘phone‘: 13651054608, ‘bank_acc‘:{ ‘ICBC‘:14324234, ‘CBC‘ : 235234, ‘ABC‘ : 35235423 } }, 1001: { ‘name‘: ‘CaiXin Guo‘, ‘email‘: ‘[email protected]‘, ‘passwd‘: ‘abc145323‘, ‘balance‘: -15000, ‘phone‘: 1345635345, ‘bank_acc‘: { ‘ICBC‘: 4334343, } }, } f = open(‘account.db‘,‘wb‘) f.write(pickle.dumps(accounts)) f.close() acc_file_name = ‘account.db‘ account_file = open(acc_file_name,‘rb‘) account_dic = pickle.loads(account_file.read()) account_file.close() account_dic[1000][‘balance‘]-=500 x = open(acc_file_name,‘wb‘) x.write(pickle.dumps(account_dic)) x.close() print(account_dic) f = open(‘account.db‘,‘rb‘) account_db = pickle.loads(f.read()) print(account_db)
dic = { ‘k1‘: [1,2], ‘k2‘: [3,4] } f = open(‘test‘,‘wb‘) pickle.dump(dic,f) f.close() f = open(‘test‘,‘rb‘) dic2 = pickle.load(f) print(dic2) f.close()
hashlib模块
用于加密相关的操作,
import hashlib # ######## md5 ######## hash = hashlib.md5() hash.update(‘admin‘) print hash.hexdigest() # ######## sha1 ######## hash = hashlib.sha1() hash.update(‘admin‘) print hash.hexdigest() # ######## sha256 ######## hash = hashlib.sha256() hash.update(‘admin‘) print hash.hexdigest() # ######## sha384 ######## hash = hashlib.sha384() hash.update(‘admin‘) print hash.hexdigest() # ######## sha512 ######## hash = hashlib.sha512() hash.update(‘admin‘) print hash.hexdigest()
小练习:
import hashlib def md5(arg): ooo = hashlib.md5(bytes(‘kai;x,in‘,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 register(user,pwd): with open(‘db‘,‘a‘,encoding=‘utf-8‘) as f: temp = user + ‘|‘+ md5(pwd) f.write(temp) k = input(‘1,登录;2,注册‘) if k == ‘2‘: user = input(‘请输入用户名:‘) pwd = input(‘请输入密码:‘) register(user,pwd) elif k == ‘1‘: user = input(‘请输入用户名:‘) pwd = input(‘请输入密码:‘) r = login(user,pwd) if r : print(‘登陆成功‘) else: print(‘登录失败‘)
时间: 2024-11-05 16:23:33