模块
模块,用一砣代码实现了某个功能的代码集合。
模块分为三种:
1)自定义模块
2)内置模块
3)开源模块(第三方模块)
模块的导入:
导入模块时是根据那个路径进行的
1 from lib.account import login #from 文件路径 import 模块 #在哪导入模块 2 import login
导入模块就是告诉python解释器去解释py文件
- 导入一个py文件,解释器解释该py文件
- 导入一个包,解释器解释该包下的 __init__.py 文件
查看模块路径;导入模块路径
示例:
import sys for i in sys.path: #查看路径 print(i) import sys sys.path.append("D:") #导入模块的路径 for i in sys.path: print(i)
安装模块:
1)软件管理工具安装(pip3)
pip3路径添加到环境变量 pip3路径: C:....python35Scripts
pip3 install requests
2)源码安装
下载代码,安装:
1,先下载 https://github.com/kennethreitz/requests/tarball/master
2,解压
3,进入目录
4,执行python setup.py install
内置模块
time模块
时间戳 1970年1月1日
格式化的字符串
结构化时间
1 import time 2 3 print(time.time()) #输出1463671696.212329 返回当前系统时间戳 4 print(time.ctime()) #输出Thu May 19 22:52:20 2016 当前系统时间 5 print(time.ctime(time.time() - 86400)) #输出Wed May 18 22:54:23 2016 过去一天的当前时间 6 print(time.gmtime(time.time() - 86400)) #将时间戳转换成struct_time格式 7 print(time.process_time()) # 0.0780005输出返回处理器时间 8 print(time.localtime(time.time() - 86400)) #将时间戳转换成struct_time格式,但返回本地时间 9 print(time.mktime(time.localtime())) #输出1463671089.0 与time.localtime()功能相反,将struct_time格式转回成时间戳格式 10 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())) #输出2016-05-19 15:24:08 将struct_time格式转成指定的字符串格式 11 print(time.strptime("2016-05-19","%Y-%m-%d") ) #将字符串格式转换成struct_time格式 12 13 import datetime 14 15 print(datetime.date.today()) #输出2016-05-19 16 17 print(datetime.date.fromtimestamp(time.time() - 86400)) #输出2016-05-18 过去一天 18 19 current_time = datetime.datetime.now() 20 print(current_time) #输出2016-05-19 23:50:12.064591 21 22 print(current_time.timetuple()) #返回struct_time格式 23 24 25 print(current_time.replace(2015,9,1)) #输出2015-09-01 00:13:09.001347 返回当前时间,但指定的值将被替换 26 27 str_to_date = datetime.datetime.strptime("20/05/16 0:06", "%d/%m/%y %H:%M") #将字符串转换成日期格式 28 print(str_to_date) #输出2016-05-20 00:06:00 29 30 new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天 31 print(new_date) #输出2016-05-30 00:13:09.042349 32 33 new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天 34 print(new_date) #输出2016-05-10 00:13:09.042349 35 36 new_date = datetime.datetime.now() + datetime.timedelta(hours=-10) #比现在减10小时 37 print(new_date) #输出2016-05-19 14:13:09.042349 38 39 new_date = datetime.datetime.now() + datetime.timedelta(seconds=120) #比现在+120s 40 print(new_date) #输出2016-05-20 00:15:09.042349
相互转换:
sys模块
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称
sys.stdin 输入相关
sys.stdin 输出相关
sys.stdout.write('please:') val = sys.stdin.readline()[:-1]
进度条:
例一:
1 import time 2 import sys 3 4 for i in range(101): 5 #显示进度条百分比 #号从1开始 空格从99递减 6 hashes = '#' * int(i / 100.0 * 100) 7 spaces = ' ' * (100 - len(hashes)) 8 sys.stdout.write(" [%s] %d%%" % (hashes + spaces, i)) 9 sys.stdout.flush() 10 time.sleep(0.05) 11 12 13 14 15 例二: 16 import sys,time 17 18 for i in range(31): 19 sys.stdout.write(' ') #每一次清空原行 20 sys.stdout.write("%s%% |%s" % (int(i/30*100), int(i/30*100)*'*')) 21 sys.stdout.flush() #强行刷新到屏幕 22 time.sleep(0.2)
序列化
json 和 pickle
用于序列化的两个模块
- json,用于字符串 和 python数据类型间进行转换
- pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
1 import pickle 2 data = {'k1':'123','k2':'hello'} 3 4 #pickle.dumps 将数据通过特殊的形式转化为只有python语言认识的字符串 5 m = pickle.dumps(data) 6 print(m) 7 8 ##pickle.dump 将数据通过特殊的形式转化为只有python语言认识的字符串,并写入文件 9 with open('D:/result.pk','w') as fp: 10 pickle.dump(data,fp) 11 12 import json 13 #json.dumps 将数据通过特殊的形式转化为所有程序语言都认识的字符串 14 n = json.dumps(data) 15 print(n) 16 17 #json.dump 将数据通过特殊的形式转化为所有程序语言都认识的字符串,并写入文件 18 with open('D:/result.json','w') as fp: 19 json.dump(data,fp)
pickle实例:
1 购物金额操作 2 #************** 3 import pickle 4 5 accounts = { 6 1000: { 7 'name':'Alex LI', 8 'email': 'lijie3721@126.com', 9 'passwd': 'abc123', 10 'balance': 15000, 11 'phone': 13651054608, 12 'bank_acc':{ 13 'ICBC':14324234, 14 'CBC' : 235234, 15 'ABC' : 35235423 16 } 17 }, 18 1001: { 19 'name': 'CaiXin Guo', 20 'email': 'caixin@126.com', 21 'passwd': 'abc145323', 22 'balance': -15000, 23 'phone': 1345635345, 24 'bank_acc': { 25 'ICBC': 4334343, 26 } 27 }, 28 } 29 30 # print(accounts) 31 #第一步 32 f = open('accounts.db','wb') 33 f.write(pickle.dumps(accounts)) 34 f.close() 35 36 37 #************** 38 import pickle 39 40 #第二步 41 acc_file_name = "accounts.db" 42 43 account_file = open(acc_file_name,'rb') 44 45 account_dic = pickle.loads(account_file.read()) 46 47 account_file.close() 48 print(account_dic) 49 50 account_dic[1000]['balance'] -= 500 51 52 f = open(acc_file_name,'wb') 53 f.write(pickle.dumps(account_dic)) 54 f.close() 55 print(account_dic) 56 57 58 #******************** 59 import pickle 60 #第三步 61 f = open("accounts.db",'rb') 62 63 account_db = pickle.loads(f.read()) 64 print(account_db)
os模块
用于提供系统级别的操作
1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 2 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 3 os.curdir 返回当前目录: ('.') 4 os.pardir 获取当前目录的父目录字符串名:('..') 5 os.makedirs('dirname1/dirname2') 可生成多层递归目录 6 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 7 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname 8 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 9 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 10 os.remove() 删除一个文件 11 os.rename("oldname","newname") 重命名文件/目录 12 os.stat('path/filename') 获取文件/目录信息 13 os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/" 14 os.linesep 输出当前平台使用的行终止符,win下为" ",Linux下为" " 15 os.pathsep 输出用于分割文件路径的字符串 16 os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' 17 os.system("bash command") 运行shell命令,直接显示 18 os.environ 获取系统环境变量 19 os.path.abspath(path) 返回path规范化的绝对路径 20 os.path.split(path) 将path分割成目录和文件名二元组返回 21 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 22 os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素 23 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 24 os.path.isabs(path) 如果path是绝对路径,返回True 25 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 26 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 27 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 28 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 29 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
重点掌握的:
1 os.stat('path/filename') 获取文件/目录信息 2 3 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 4 5 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 6 7 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
hashlib模块
加密相关操作
1 import hashlib 2 3 hash = hashlib.md5(bytes('hjffhash347d2h3s',encoding='utf-8')) 4 hash.update(bytes('888000',encoding='utf-8')) 5 print(hash.hexdigest())
实例:
mb5加密
1 import hashlib 2 def md5(arg): 3 ooo = hash = hashlib.md5(bytes('hjffhash347d2h3s',encoding='utf-8')) 4 ooo.update(bytes(arg,encoding='utf-8')) 5 return ooo.hexdigest() 6 def login(user,pwd): 7 with open("db",'r',encoding="utf-8") as f: 8 for line in f: 9 u, p = line.strip().split("|") 10 if u == user and p == md5(pwd): 11 return True 12 def register(user,pwd): 13 with open("db",'a',encoding="utf-8")as f: 14 temp =user + "|" + md5(pwd) 15 f.write(temp) 16 17 i = input("1,登录;2,注册") 18 if i== "2": 19 user = input("用户名:") 20 pwd = input("密码:") 21 r = login(user, pwd) 22 if r: 23 print("登录成功") 24 else: 25 print("登录失败")
详细参考:http://www.cnblogs.com/wupeiqi/articles/4963027.html