什么是模块:
模块就是一个功能的集合。
模块就和乐高积木差不多,你用这些模块组合出一个模型,然后也可以用这个模块加上其他的模块组合成一个新的模型
模块的种类:
1、内置模块(python自带的比如os、file等模块)
2、自定义模块,自己写的模块
3、第三方模块
模块的导入:
import module from module.xx.xx import xx from module.xx.xx import xx as rename from module.xx.xx import *
内置模块
1、os用于提供系统级别的操作
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: (‘.‘) os.pardir 获取当前目录的父目录字符串名:(‘..‘) os.makedirs(‘dirname1/dirname2‘) 可生成多层递归目录 os.removedirs(‘dirname1‘) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir(‘dirname‘) 生成单级目录;相当于shell中mkdir dirname os.rmdir(‘dirname‘) 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir(‘dirname‘) 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat(‘path/filename‘) 获取文件/目录信息 os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" os.pathsep 输出用于分割文件路径的字符串 os.name 输出字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘ os.system("bash command") 运行shell命令,直接显示 os.environ 获取系统环境变量 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path) 如果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所指向的文件或者目录的最后修改时间
2、sys用于提供对解释器相关的操作
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 sys.stdout.write(‘please:‘) val = sys.stdin.readline()[:-1]
3、hashlib
mport hashlib # ######## md5 ######## hash = hashlib.md5() hash.update(‘shuaige‘) print hash.hexdigest() >>> import hashlib >>> hash = hashlib.md5() >>> hash.update(‘shuaige‘) >>> print hash.hexdigest() 37d2b9990df5a6843caf19352fee42a6 # ######## sha1 ######## hash = hashlib.sha1() hash.update(‘shuaige‘) print hash.hexdigest() >>> hash = hashlib.sha1() >>> hash.update(‘shuaige‘) >>> print hash.hexdigest() fdb58cf91e7291b67815440281e4154e87747b68 # ######## sha256 ######## hash = hashlib.sha256() hash.update(‘shuaige‘) print hash.hexdigest() >>> hash = hashlib.sha256() >>> hash.update(‘shuaige‘) >>> print hash.hexdigest() 0dc6e2b03447ac1fde5a8ae5f9d609b2b37f26f5c8aeec5d244dde6184fde90d # ######## sha384 ######## hash = hashlib.sha384() hash.update(‘shuaige‘) print hash.hexdigest() >>> hash = hashlib.sha384() >>> hash.update(‘shuaige‘) >>> print hash.hexdigest() 6dd79c38dc27c8f69411c2e77face2209606e08702fcbe7c5f73bb9e6a9ef1f58890156604ad6c71581dc5b6f7aea85e # ######## sha512 ######## hash = hashlib.sha512() hash.update(‘shuaige‘) print hash.hexdigest() >>> hash = hashlib.sha512() >>> hash.update(‘shuaige‘) >>> print hash.hexdigest() e9c94882cb0d9c61919f4d4c539a8bafe5f5a0708d214fbd50343c1e96a01ebb732883d0b0b36bff1e542cff69071395f511650944561807488700c71fb06338
以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。
hash = hashlib.md5(‘898oaFs09f‘) hash.update(‘shuaige‘) print hash.hexdigest() ----------------------------------------------------------------------------------- >>> hash = hashlib.md5(‘898oaFs09f‘) #这里把自定义的信息加上然后在进行加密 >>> hash.update(‘shuaige‘) >>> print hash.hexdigest() 6d1233c4e14a52379c6bc7a045411dc3
还有厉害的加密方法:python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密
import hmac h = hmac.new(‘shuaige‘) h.update(‘hello laoshi‘) print h.hexdigest()
4、json 和 pickle
用于序列化的两个模块
json,用于字符串 和 python数据类型间进行转换
pickle,用于python特有的类型 和 python的数据类型间进行转换
json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
json dumps把数据类型转换成字符串 dump把数据类型转换成字符串并存储在文件中 loads把字符串转换成数据类型 load把文件打开从字符串转换成数据类型
pickle同理
现在有个场景在不同设备之间进行数据交换很low的方式就是传文件,dumps可以直接把服务器A中内存的东西发给其他服务器,比如B服务器、
在很多场景下如果用pickle的话那A的和B的程序都的是python程序这个是不现实的,很多时候都是不同的程序之间的内存交换怎么办?就用到了json(和html类似的语言)
并且josn能dump的结果更可读,那么有人就问了,那还用pickle做什么不直接用josn,是这样的josn只能把常用的数据类型序列化(列表、字典、列表、字符串、数字、),比如日期格式、类对象!josn就不行了。
为什么他不能序列化上面的东西呢?因为josn是跨语言的!
5、ConfigParser
用于对特定的配置进行操作,当前模块的名称在 python 3.x 版本中变更为 configparser。
# 注释1 ; 注释2 [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(‘shuaige‘) #sec = config.add_section(‘shuaige‘) #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"))
自定义模块
自定义模块一般都是自己写的可以是独立的一个.py文件也可以是一个文件夹
但是普通的文件夹不是一个模块必须有__int__的目录才是模块
开源模块
下载安装有两种方式:
通过第三方的集成安装
yum pip apt-get ...
通过源码安装
下载源码 解压源码 进入目录 编译源码 python setup.py build 安装源码 python setup.py install
注:在使用源码安装时,需要使用到gcc编译和python开发环境
未完待续。。。。。。。。。