python基础整理笔记(六)
一. 关于hashlib模块的一些注意点
hashlib模块用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD5 算法;
md5生成一个32位的16进制字符;
SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示,比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,切长度更长。
以MD5为例,一般的计算方法如下:
m = hashlib.md5()
a = 'test1'
m.update(bytes(a, encoding='utf-8'))
# hexdigest是输出的16进制的结果
print(m.hexdigest())
# hexdigest的结果用hex来decode之后得到的就是这个
print(m.digest())
但有的时候我们需要对一个大文件求md5值,这时候就无法将整个文件内容读取进内存,需要类似如下处理:
m = hashlib.md5()
read_len = 2 ** 16
with open(file_path) as f:
while True:
buf = f.read(read_len)
if buf:
m.update(buf)
else:
break
print(m.hexdigest())
分段一定长度读取整个文件,然后不断update直到全部结束。
另外需要注意的是,上述的各种摘要算法的结果,都不是唯一的,也就是说不同的字符串可能计算出相同结果,这种被称为碰撞。所以不能将之作为一个唯一键来发挥作用。
二. exec和eval的注意点
exec和eval给我们的感觉很相似,都是动态执行一个字符串,但是他们是有明显区别的。
exec是一个语法,并非函数(即类似if, for之类的),它的作用是将收到的字符串作为py代码动态的运行,因此也就没有返回值。
示例如下:
>>> exec("for i in range(5):print i")
0
1
2
3
4
eval是一个方法,是动态计算作为字符串的表达式的值,会返回表达式的结果;也因此非表达式的语句是无法运行的。
示例如下:
# eval无法计算非表达式
>>> eval("for i in range(5):print i")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
for i in range(5):print i
^
SyntaxError: invalid syntax # 表达式的结果会直接输出
>>> eval('5 + a', {'a':1})
6
三. subprogress模块
subprogress模块用于执行系统命令,类似于os.system, os.spawn*;不过subprogress在现在更推荐,官方文档中说:

可见未来可能会完全抛弃上述两个老的模块。
我写了一个用subprogress.PIPE(本方法适合于执行复杂命令)来执行git clone操作的小方法作为示例如下:
def checkout_codes(git_url, tag_version, user_id, passwd, dst_dir):
PIPE = subprocess.PIPE
git_cmd = "https://%s:%s@%s" % (user_id, passwd, git_url)
process = subprocess.Popen(['git', 'clone', git_cmd, dst_dir, '-b', tag_version],
stdout=PIPE, stderr=PIPE)
stdoutput, stderroutput = process.communicate()
if process.poll():
print stdoutput
print stderroutput
return False
return True
三. configparser模块
onfigparser用于处理特定格式的文件,其本质上是利用open来操作文件。
在python2中configparser库库叫ConfigParse,需要pip来安装
该库实现了操作ini风格类型文件的各种方法。ini风格类型示例如下:
[]
password =
admin_flag = []
password =
admin_flag = []
password =
admin_flag =
每个[]代表一个section,下面一个等号对代表这个section的一项属性和值。使用configparser的各种方法示例如下:
cf = configparser.ConfigParser()
# 读取文件
cf.read('a.conf') # sections方法返回所有的section名字的列表
for sec in cf.sections():
print(sec) # 增加一个新的section
cf.addsection('')
# 给新的section'555'增加属性
set('', 'password', '') # 原有的section的属性也可以更改,和增加的方法一致
set('', 'password', '') # 通过get和getint方法之类可以取到一个section的一个属性的值
cf.get('', 'password')
cf.getint('', 'password') # 通过items可以获得一个section的所有属性
cf.items('') # 更改结束以后,用write修改文件
cf.write(open('a.conf', "w")
python基础整理笔记(六)的更多相关文章
- python基础整理笔记(九)
一. socket过程中注意的点 1. 黏包问题 所谓的黏包就是指,在TCP传输中,因为发送出来的信息,在接受者都是从系统的缓冲区里拿到的,如果多条消息积压在一起没有被读取,则后面读取时可能无法分辨消 ...
- python基础整理笔记(五)
一. python中正则表达式的一些查漏补缺 1. 给括号里分组的表达式加上别名:以便之后通过groupdict方法来方便地获取. 2. 将之前取名为"name"的分组所获得的 ...
- python基础整理笔记(四)
一. python 打开文件的方法 1. python中使用open函数打开文件,需要设定的参数包括文件的路径和打开的模式.示例如下: f = open('a.txt', 'r+') 2. f为打开文 ...
- python基础整理笔记(二)
一. 列表 1. 创建实例: a = [1,2,3] b = list() 2. 主要支持的操作及其时间复杂度如下: 3. 其他 python中的列表,在内存中实际存储的形式其实是分散的存储,比较类似 ...
- python基础整理笔记(一)
一. 编码 1. 在python2里,加载py文件会对字符进行编码,需要在文件头上的注释里注明编码类型(不加则默认是ascII). # -*- coding: utf-8 -*- print 'hel ...
- python基础整理笔记(八)
一. python反射的方式来调用方法属性 反射主要指的就是hasattr.getattr.setattr.delattr这四个函数,作用分别是检查是否含有某成员.获取成员.设置成员.删除成员. 此外 ...
- python基础整理笔记(七)
一. python的类属性与实例属性的注意点 class TestAtt(): aaa = 10 def main(): # case 1 obj1 = TestAtt() obj2 = TestAt ...
- python基础整理笔记(三)
一. python的几种入参形式:1.普通参数: 普通参数就是最一般的参数传递形式.函数定义处会定义需要的形参,然后函数调用处,需要与形参一一对应地传入实参. 示例: def f(a, b): pri ...
- python基础篇(六)
PYTHON基础篇(六) 正则模块re A:正则表达式和re模块案例 B:re模块的内置方法 时间模块time A:时间模块的三种表示方式 B:时间模块的相互转换 随机数模块random A:随机数模 ...
随机推荐
- [原创.数据可视化系列之六]使用openlyaers进行公网地图剪切
进行地图开发的过程中,我一般使用天地图或者微软的地图作为地图,因为这两种地图的经纬度偏差最小,基本可以满足用户需求,比如: 不用说,都是全部地图,这也是最常用的一种方法. 但是用户说,我只看大连的地图 ...
- web.py+html+mysql实现web端小系统的问题汇总
利用web.py+html(bootstrap)+mysql实现了一个小型的设备管理系统,在这个过程中遇到很多问题,将问题及解决方案总结如下,有遇到类似问题的同学,希望可以帮到你们. 1.关于中文的编 ...
- otter双主同步安装与配置
otter是阿里的开源数据同步项目,资源地址就不用说了哈,网上找,阿里云论坛关于单方向同步的配置已经很清楚了,理论上说,双主同步也不复杂,但是毕竟 是数据库,比较重要,配置双主的时候,总觉得心里没底, ...
- linux下添加链接与删除链接(ln命令的用法)
添加链接使用ln命令用法:#ln --help用法:ln [选项]... 目标 [链接名]或:ln [选项]... 目标... 目录或:ln [选项]... --target-directory=目录 ...
- nginx php-fpm安装配置
nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端. nginx一般是把请求发fastcgi管理进程处理,fascgi管 ...
- Nginx配置upstream实现负载均衡
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- IOS XML解析
<?xml version = "1.0" encoding ="utf-8"?> <video>小黄人</video> ...
- 关于unity3D的学习感想
在老师布置团队项目后组长确定项目是做游戏是,我才接触的Unity3D游戏引擎. 因为一开始我没有接触过这类软件,更没有用过.所以作为一个新手,做好的办 法实在网上找教程.网上说Unity3D是由Uni ...
- ssh链接数设置问题
今天碰到一个问题,脚本执行scp文件拷贝,因为拷贝的服务器很多,所以拷贝脚本的实现是在把拷贝动作转后台执行,结果发现一堆文件拷贝失败.比较有迷惑性的是,拷贝失败的通常是同一个文件夹拷贝到所有服务器时失 ...
- 百度地图定位经纬度返回4.9E-324有关问题
1.查看你的应用是否有权限查看你的地理位置信息,有可能是你没有加上权限,或者当你第一次打开app时询问你是否给予软件权限查看你的地理位置信息,你选择了否,所以经纬度就一直返回4.9E-324 2.查看 ...