python之路第五篇之模块和加密算法(进阶篇:续)

时间:2022-09-09 23:00:51

模块

Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中有一个概念叫做模块(module)

简单地说,模块就是一个保存了Python代码的文件。

模块分类;

1)内置模块

2)自定义模块

3)第三方模块

模块存在方式:

“.py”
"文件夹"

paramiko 模块(这个模块需要安装,具体安装方法很简单,这里不做说明)

用途:linux 主机远程 用到这个模块

模块的导入

在Python中用关键字import来引入某个模块,比如要引用sys这个模块,就可以在文件最开始的地方用import sys 来导入.

在调用sys模块中的函数时,必须这样引用:

 模块名.函数名

为什么必须加上模块名这样调用呢?

因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数,所以如果像上述这样引入模块的时候,调用函数必须加上模块名。

模块导入方式一:

import sys      #导入模块

print argv      #这样会报错
print sys.argv #这样才会输出正常结果

但是有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,可以使用如下方法:

模块导入方式二:

from 模块名 import 函数名1,函数名2....

from sys import argv   #导入模块
print argv

模块导入方式三:

from 模块名 import *

from sys import *  #导入模块 (这种方式不推荐)
print sys

模块重命名:

from 模块名 import 函数名 as 新名字
form sys import argv as test
print test

模块的获取几种方式:

1.自己写
2.内置
3.下载

自定义模块:

如何导入自定义模块?

1.将自定义的模块导入到python模块默认路径中,然后通过 “import 模块名” 导入

通过如下方式可以获取模块路径,然后将模块导入到这个路径中即可:

>>> import sys
>>> sys.path
['', '/Library/Python/2.7/site-packages/pip-0.7.2-py2.7.egg',
'/Library/Python/2.7/site-packages/redis_py_cluster-1.0.0-py2.7.egg',
'/Library/Python/2.7/site-packages/redis-2.10.3-py2.7.egg',
'/Library/Python/2.7/site-packages/paramiko-1.10.1-py2.7.egg',
'/Library/Python/2.7/site-packages', '/System/
.....
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/plat-darwin', '/'/Library/Python/2.7/site-packages']

因为我的是Mac 电脑,所以python 默认是这个路径:'/Library/Python/2.7/site-packages'

2.通过 追加的方式,动态的导入自定义的模块的路径 到python默认模块路径中:

import sys
sys.path.append('/home/ec2-user/') #将这个模块实际存放路径加载到 python模块默认路径 import test #(test.py 这个文件存在在/home/ec2-user/目录下,则可以通过这种方法)

注意:

如果需要导入一个新建的目录,则这个目录下需要存在一个__init__.py 文件:

__init__.py: 是个特殊的py文件,在python中,这个也就是文件夹及模块包的区别 

内置模块:

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所指向的文件或者目录的最后修改时间

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]

详细执行:

>>> os.getcwd()
'/Users/yangallen214' >>> os.chdir('/Users/yangallen214/Desktop')
>>> os.getcwd()
'/Users/yangallen214/Desktop' >>> os.curdir
'.' >>> os.curdir
'.'
>>> os.pardir
'..' >>> os.makedirs('./test/test1')
>>> os.listdir('./test')
['test1', 'yangyh', 'yangyh.zip'] >>> os.removedirs('./test/test1')
>>> os.listdir('./test')
['yangyh', 'yangyh.zip'] >>> os.mkdir('./test/test1')
>>> os.rmdir('./test/test1')
>>> os.listdir('./test')
['yangyh', 'yangyh.zip'] >>> os.makedirs('./test1111/test11')
>>> os.listdir('./test1111/')
['test11']
>>> os.remove('./test1111/test11') #报错,是因为它只能删除文件
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 1] Operation not permitted: './test1111/test11' >>> os.rename('./test1111/test11','./test1111/test12')
>>> os.listdir('./test1111')
['test12'] >>> os.stat('./test1111/test12')
posix.stat_result(st_mode=16877, st_ino=15556867, st_dev=16777220L, st_nlink=2,
st_uid=501, st_gid=20, st_size=68, st_atime=1448451416, st_mtime=1448451416,
st_ctime=1448451416) >>> os.sep
'/'
>>>
>>> os.linesep
'\n'
>>> os.pathsep
':'
>>> os.name
'posix' >>> os.system('pwd')
/Users/yangallen214
0 >>> os.environ
{'VERSIONER_PYTHON_PREFER_32_BIT': 'no', 'LOGNAME': 'yangallen214', 'USER':
'yangallen214', 'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/
..... >>> os.path.abspath('./test1111')
'/Users/yangallen214/test1111' >>> os.path.split('./Desktop')
('.', 'Desktop') >>> os.path.dirname('./Desktop')
'.'
>>> os.path.basename('./Desktop')
'Desktop' >>> os.path.exists('./test1111/aa.txt')
False >>> os.path.isabs('./Desktop')
False
>>> os.path.isabs('/Users/yangallen214/Desktop')
True >>> os.path.isfile('./test1111/aa.txt')
False >>> os.path.join('/Users/yangallen214/Desktop','./test1111/test12')
'/Users/yangallen214/Desktop/./test1111/test12'
>>> os.path.join('/Users/yangallen214/Desktop','/test1111/test12')
'/test1111/test12'
>>>
>>> os.path.join('/Users/yangallen214/Desktop','./test1111/test12','./test/')
'/Users/yangallen214/Desktop/./test1111/test12/./test/'
>>> os.path.join('/Users/yangallen214/Desktop','./test1111/test12','/test/')
'/test/' >>> os.path.getatime('./test1111')
1448451671.0
>>> os.path.getmtime('./test1111')
1448451657.0 >>> import sys
>>> sys.argv
[''] >>> sys.version
'2.7.6 (default, Sep 9 2014, 15:04:36) \n[GCC 4.2.1 Compatible Apple LLVM 6.0
(clang-600.0.39)]'
>>> sys.maxint
9223372036854775807
>>> sys.platform
'darwin'

ConfigParser 模块

用于对特定的配置进行操作

ConfigParser方法:

1、config=ConfigParser.ConfigParser()
创建ConfigParser实例 2、config.sections()
返回配置文件中节序列 3、config.options(section)
返回某个项目中的所有键的序列 4、config.get(section,option)
得到section中option的值,返回为string类型 5、config.add_section(str)
添加一个配置文件节点(str) 6、config.set(section,option,val)
设置section节点中,键名为option的值(val) 7、config.read(filename)
读取配置文件 8、config.write(obj_file)
写入配置文件 9、config.items(section)
得到该section的所有键值对
>>> import ConfigParser,sys
>>>
>>> config=ConfigParser.ConfigParser()
>>> config.add_section("mybook")
>>> config.set("mybook","title","This is mytitile")
>>> config.set("mybook","author","Allen")
>>> config.add_section("size")
>>> config.set("size","size",1024)
>>> config.write(sys.stdout) #执行结果如下
[mybook]
title = This is mytitile
author = Allen [size]
size = 1024

Python hashlib和hmac模块

Python中用于加密的函数位于hashlib,hmac模块中,都是内置模块,直接导入即可使用

hashlib模块实现了md5,sha1,sha224,sha256,sha384,sha512等算法,

可以hashlib.algorithms查看

hmac模块实现了hmac算法,需要一个key来进行加密

查看可用的加密方式:

>>> import hashlib
>>> hashlib.
hashlib.__all__ hashlib.__getattribute__( hashlib.__repr__( hashlib.new(
hashlib.__class__( hashlib.__hash__( hashlib.__setattr__( hashlib.sha1(
hashlib.__delattr__( hashlib.__init__( hashlib.__sizeof__( hashlib.sha224(
hashlib.__dict__ hashlib.__name__ hashlib.__str__( hashlib.sha256(
hashlib.__doc__ hashlib.__new__( hashlib.__subclasshook__( hashlib.sha384(
hashlib.__file__ hashlib.__package__ hashlib._hashlib hashlib.sha512(
hashlib.__format__( hashlib.__reduce__( hashlib.algorithms
hashlib.__get_builtin_constructor( hashlib.__reduce_ex__( hashlib.md5(
>>> hashlib.algorithms
('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')

hashlib 模块

用于加密相关的操作,代替了md5模块和sha模块,主要提供 md5,sha1,sha224,sha256,sha384,sha512 算法

创建一个加密函数对象

>>> import tab   #(这种加密方式将废弃)
>>> import md5
>>> hash = md5.new()
>>> hash.update('allen123')
>>> print hash.hexdigest()
432a44ddc0aa72ed8c200f53b6268af4
>>>
>>> import sha #(这种加密方式将废弃)
>>> hash = sha.new()
>>> hash.update('allen123')
>>> print hash.hexdigest()
2aa55594b365e70a7ee83d9b5923e493d21ee7ff
>>>
>>> import hashlib          #(hashlib)
>>> hash = hashlib.md5()
>>> hash.update('allen123')
>>> print hash.hexdigest()
432a44ddc0aa72ed8c200f53b6268af4
>>>
>>> hash = hashlib.sha1() #(sha1)
>>> hash.update('allen123')
>>> print hash.hexdigest()
2aa55594b365e70a7ee83d9b5923e493d21ee7ff
>>>
>>>
>>> hash = hashlib.sha256() #(sha256)
>>> hash.update('allen123')
>>> print hash.hexdigest()
7d2ad2f73b51c875d301ae7c57f19772d628771b330a67a750701bdedcd37d5e
>>>
>>>
>>> hash = hashlib.sha384() #(sha384)
>>> hash.update('allen123')
>>> print hash.hexdigest()
b2637c4901864c63a7eadd0da97ddd19417cd81016cfbf20c4984007de04efe78a6cd9b2855e3fb8f0a88546dfe68e1e
>>>
>>>
>>> hash = hashlib.sha512() #(sha512)
>>> hash.update('allen123')
>>> print hash.hexdigest()
41772713f60dc12dd1d183b865c41e914b8ef56d7509b7ae657ad9f7a4be283172e79b71ef42474c4f4aa2b7c3a120e6bf719022d1a647fcbe2e7b3f64d42ddd
>>>

以上加密算法其实但还存在缺陷,别人通过撞库可以反解,因此有必要对加密算法中添加自定义key来加密。

请看下面两种:

>>> import hashlib
>>> hash = hashlib.md5('dkujhn33^57Jlddrrlkg')
>>> hash.update('allen123')
>>> print hash.hexdigest()
62b6828287f647d75432905c89b21305

hmac 模块

它内部对我们创建key和内容再进行处理然后再加密

>>> import hmac
>>> hash = hmac.new("allen123")
>>> hash.update("^test123yyh123^&")
>>> print hash.hexdigest()
6aa286ef24c63e6072b3904802aa795a

python之路第五篇之模块和加密算法(进阶篇:续)的更多相关文章

  1. Python之路【第十七篇】:Django【进阶篇 】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  2. Python之路【第十七篇】:Django【进阶篇】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  3. Python之路第五天,基础&lpar;5&rpar;-序列化和字符串格式化

    序列化 Python中用于序列化的两个模块 json 用于『字符串』和『python基本数据类型』间进行转换 pickle 用于『python特有的类型』和『python基本数据类型』间进行转换 js ...

  4. 图解Python 【第六篇】:面向对象-类-进阶篇

    由于类的内容比较多,分为类-初级基础篇和类-进阶篇 本节内容一览图: 一.类成员修饰符 每一个类的成员都有两种形式: 公有成员,在任何地方都能访问 私有成员,只能在类的内部才能访问 1.1.私有成员和 ...

  5. Python之路第五天,基础&lpar;6&rpar;-模块

    模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个 ...

  6. python之路第五篇之装饰器&colon;(进阶篇)

    装饰器: 学前必备知识: def f1(): print "f1" f1() #表示函数执行 f1 #表示函数,指向内存地址 f1 = lambda x: x + 1 f1() # ...

  7. Python之路&lpar;第五篇&rpar; Python基本数据类型集合、格式化、函数

    一.变量总结 1.1 变量定义 记录某种状态或者数值,并用某个名称代表这个数值或状态. 1.2 变量在内存中的表现形式 Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是 ...

  8. python之路第五篇之递归(进阶篇:续:经典例子剖析)

    递归 在函数内部,可以调用其他函数; 如果一个函数在内部调用自身本身,这个函数就是递归函数. 例如,我们来计算阶乘: n! = 1 x 2 x 3 x ... x n, 用函数f1(n)表示,可以看出 ...

  9. python之路十五

    CSS position 属性 定义和用法position 属性规定元素的定位类型.说明这个属性定义建立元素布局所用的定位机制.任何元素都可以定位,不过绝对或固定元素会生成一个块级框,而不论该元素本身 ...

随机推荐

  1. Mongodb数据库学习系列————(一)Mongodb数据库主从复制的搭建

    Mongodb数据库主从复制的搭建 Writeby:lipeng                                    date:2014-10-22 最近项目上用到了位置查询,在网上 ...

  2. css display&colon;inline-block 出现空格解决方案

    一: 给父元素添加 display: table;(只加这一句在谷歌, safari里可以) 子元素加: display: table-cell(火狐) 两句都加完美解决 二: .nav ul{fon ...

  3. windows下面配置jdk环境变量

    在环境变量中添加如下: Path D:\Program Files\Java\jdk1.6.0_26\binJAVA_HOME D:\Program Files\Java\jdk1.6.0_26CLA ...

  4. hdu&lowbar;5898&lowbar;odd-even number&lpar;数位DP&rpar;

    题目链接:hdu_5898_odd-even number 题意: 给你一个区间,问你这个区间中满足连续的偶数的位数为奇数,连续的奇数的位数是偶数的个数 题解: 设dp[i][j][k][l]为考虑当 ...

  5. ionic获取表单input的值的两种方法

    1.参数传递法 直接在input处使用 #定义参数的name值,注意在ts中参数的类型 html页面: <ion-input type="text" placeholder= ...

  6. windows下的Redis主从集群搭建

    Redis官方不提供Windows版本,目前Windows下的版本是有微软开源团队(Microsoft Open Tech group)维护. http://redis.cn/ redis中文网 wi ...

  7. 彻底解决windows10&plus;matlab2018a调用libsvm时出现找不到编译器问题

    本文转载自:Shane Zhao博客(CSDN) https://blog.csdn.net/silence2015/article/details/53106156 个人申明,只是因为解决这个问题花 ...

  8. Codeforces Round &num;533 &lpar;Div&period; 2&rpar; C&period;思维dp D&period; 多源BFS

    题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...

  9. servlet3&period;1

    Servlet3.1新增的新特性强制更改sessionId 由HttpServletRequest 的changeSessionId()方法实现 非阻塞式IO 非阻塞式IO我们应该知道Servlet底 ...

  10. android启动画面隐藏状态栏全屏显示

    1.在根部局给一个id,然后直接设置就行了layout.setSystemUiVisibility(View.INVISIBLE); 状态栏就没有了. 2.如果你只是想改变状态栏颜色的也可以 //5. ...