1.1  hashlib模块使用

获取文件的MD5值,和shell下的MD5sum一样

方法一:先实例化一个对象,再使用update做校验,最后十六进制查看hexdigest

In [3]: import hashlib

In [5]: md5 = hashlib.md5()

In [6]: md5.update("a")

In [7]: md5.hexdigest()

Out[7]: '0cc175b9c0f1b6a831c399e269772661'

In [8]: md5.update("b\n")  #叠加,实际为ab\n的值

In [9]: md5.hexdigest()

Out[9]: 'daa8075d6ac5ff8d0c6d4650adb4ef29'

说明:

对比shell,哈希值一样

[root@huangzp3 python]# echo "ab"|md5sum

daa8075d6ac5ff8d0c6d4650adb4ef29  -

与shell下一致,-n #表示不加换行符

[root@huangzp3 python]# echo "a"|md5sum

60b725f10c9c85c70d97880dfe8191b3  -

[root@huangzp3 python]# echo -n "a"|md5sum

0cc175b9c0f1b6a831c399e269772661  -

方法二:字符串短时,直接调用

In [10]: hashlib.md5("hello").hexdigest()

Out[10]: '5d41402abc4b2a76b9719d911017c592'

脚本:#!/usr/bin/env python

import sys

import hashlib

import codecs

def getMd5(f):

md5 = hashlib.md5()

with codecs.open(f) as fd:

while True:

data = fd.read(4096)

if data:

md5.update(data)    #每读一次,获取一次md5值,MD5值累加

else:

break

return md5.hexdigest()

if __name__ == "__main__":

try:

print getMd5(sys.argv[1])

except IndexError:

print ("%s follow a argument" % __file__)

运行结果:

[root@huangzp3 python]# python 01.py 1.py

e796a8f418fa90d7e4f0a162119f114a

[root@huangzp3 python]# cat 1.py |md5sum

e796a8f418fa90d7e4f0a162119f114a  -

1.2 os.walk模块使用

os.walk():迭代目录里文件,返回一个列表,分别是:路径、路径下的目录、路径下的文件

In [17]: walk = os.walk("/root/python/a")

In [18]: for i,j,k in walk:print i,j,k

/root/python/a ['b'] ['a.txt']

/root/python/a/b ['c'] ['b.txt']

/root/python/a/b/c [] ['c.txt']

脚本:#!/usr/bin/env python

import sys

import hashlib

import codecs

import os

def getMd5(f):

md5 = hashlib.md5()

with codecs.open(f) as fd:

while True:

data = fd.read(4096)

if data:

md5.update(data)

else:

break

return md5.hexdigest()

walk = os.walk(sys.argv[1])

s = ""

for i,j,k in walk:

for fil in k:

fa = os.path.join(i,fil)

result = getMd5(fa)

s += result +" " +fa +"\n"

print s,

运行结果:

[root@huangzp3 python]# python 02.py /root/python/

b9f6f7a02766b3f9bd28369c6c331218 /root/python/20.py

e796a8f418fa90d7e4f0a162119f114a /root/python/1.py

01b1b4f4b2eb7155187c27057e9a4de2 /root/python/1.pyc

1.3  生成器yield

想捕获函数的值,但是又不想退出程序。yield,记住当前函数的值,用于下次调用。调用时用next()方法或者for循环遍历

修改如上脚本:#!/usr/bin/env python

import sys

import hashlib

import os

import codecs

def getMd5(f):

md5 = hashlib.md5()

with codecs.open(f) as fd:

while True:

data = fd.read(4096)

if data:

md5.update(data)

else:

break

return md5.hexdigest()

def fileMd5(topdir):

walk = os.walk(topdir)

for i,j,k in walk:

for fil in k:

fa = os.path.join(i,fil)

result = getMd5(fa)

yield "%s %s" % (result,fa)

if __name__ == "__main__":

topdir = sys.argv[1]

md5 = fileMd5(topdir)

for lis in md5:

print lis

1.4 文件md5值的校验

找出目录中内容相同的文件

脚本:#!/usr/bin/env python

import sys

import hashlib

import os

import codecs

def getMd5(f):

md5 = hashlib.md5()

with codecs.open(f) as fd:

while True:

data = fd.read(4096)

if data:

md5.update(data)

else:

break

return md5.hexdigest()

def getDir(topdir):

dic = {}

walk = os.walk(topdir)

for i,j,k in walk:

for lis in k:

fil = os.path.join(i,lis)

md5 = getMd5(fil)

if dic.has_key(md5):

dic[md5].append(fil)

else:

dic[md5] = [fil]  #dic[md5] = [fn] ,字典的key为MD5,value值为fn

return dic

if __name__ == "__main__":

result = getDir(sys.argv[1])

for i,j in result.items():

if len(j)>1:

print i,j

运行结果:

[root@huangzp3 python]# python 04.py /root/python

b026324c6904b2a9cb4b88d6d61c81d1 ['./test/a/1.txt', './test/b/2.txt', './test.bak/test/a/1.txt', './test.bak/test/b/2.txt']

1.5 字典排序

字典是无序的

sorted(可迭代对象,cmp,key=根据什么排序,reverse=是否倒序),返回一个排序的列表

说明:key表示关键字;operator.itemgetter(0):根据字典的key值排序,(1)表示根据字典的value排序;reverse=True倒序

x.iteritems()返回一个序列,items()与iteritems()的区别和range()与xrange()的区别一样

找出占用空间大的文件

脚本:#/usr/bin/env python

import sys

import os

import operator

def getDic(topdir):

dic = {}

walk = os.walk(topdir)

for i,j,k in walk:

for lis in k:

fs = os.path.join(i,lis)

sz = os.path.getsize(fs)

dic[fs] = sz

return dic

if __name__ == "__main__":

dic =  getDic(sys.argv[1])

sorted_dic = sorted(dic.iteritems(),key=operator.itemgetter(1),reverse=True)

for k,v in sorted_dic[:10]:

if v>1024:

K = int(v)/1024

if K>1024:

M = K/1024

if M>1024:

v = str(M/1024) +"G"

else:

v = str(M) +"M"

else:

v = str(K) +"K"

print k,"------>",v

运行结果:

[root@huangzp3 python]# python 05.py /data/program/

/data/program/mongo/data/data27018/local.2 ------> 511M

/data/program/mongo/data/data27018/local.1 ------> 511M

/data/program/mongo/data/data27017/local.1 ------> 511M

/data/program/mongo/data/data27017/local.2 ------> 511M

/data/program/mongo/logs/mongodb-27018.log ------> 488M

/data/program/mysql/lib/libmysqld.a ------> 235M

/data/program/mongo/data/data27018/journal/j._7 ------> 128M

/data/program/mysql/bin/mysqld ------> 95M

/data/program/mysql/bin/mysql_client_test_embedded ------> 87M

/data/program/mysql/bin/mysql_embedded ------> 87M

1.6 python调用外部命令

1)os.system():输出在终端上,捕获不到

In [4]: os.system("ls")

001.sh 10.sh   1.py

2)os.popen():只能捕捉到标准输出,捕捉不到标准错误输出

In [12]: a = os.popen("ls")

In [13]: a.read

a.read      a.readline

a.readinto  a.readlines

3)os.popen2():返回2个对象,一个标准输入、一个标准输出

In [14]: sdtin,stdout = os.popen2("sort")

/usr/bin/ipython:1: DeprecationWarning: os.popen2 is deprecated.  Use the subprocess module.

#!/usr/bin/python2

4)os.popen3():返回3个对象,标准输入、标准输出、标准错误输出

In [16]: stdin,stdout,stderr = os.popen3("ls a")

/usr/bin/ipython:1: DeprecationWarning: os.popen3 is deprecated.  Use the subprocess module.

#!/usr/bin/python2

5)os.popen4:返回2个对象,pipe_in和pipe_out_err

6)subprosess

subpeocess.call('ls -l --color /root',shell=True)

说明:输出不能捕捉到,类似于os.system;不加-l,就不用shell

subprocess.check_call(['mkdir','/tmp/aaa'])

说明:会抛出python异常

In [19]: subprocess.call("ls -l",shell=True)

total 580868

-rw-r--r--  1 root root       103 Nov 22 16:23 001.sh

-rw-r--r--  1 root root       375 Nov  1 03:00 100.sh

-rw-r--r--  1 root root  47624178 Nov  1 19:35 100.txt

捕捉异常

脚本:#/usr/bin/env python

import subprocess

try:

subprocess.check_call("exit 1",shell=True)  #check_call会抛出python异常

except subprocess.CalledProcessError:

pass

print "hello world"

运行结果:

[root@huangzp3 python]# python 06.py

hello world

python 采集系统_python—收集系统信息相关推荐

  1. python是什么牌子主机_python 收集主机信息

    这篇文章是之前几篇的一个小综合.也是通过收集主机的一些参数信息,熟悉python里的文件读取,字符切割,字典存储等知识. 文章结构: (1) 文章目的,需要收集的信息,并逐个分析如何获取信息. (2) ...

  2. python画代码-Python教程_Python画Mandelbrot集 代码

    Python教程_Python画Mandelbrot集 代码 作者:Comet 来源: 课课家 www.kokojia.com点击数:278发布时间:2015-06-19 11:17:19 曼德勃罗集 ...

  3. 如何用 Python 和 API 收集与分析网络数据?

    摘自 https://www.jianshu.com/p/d52020f0c247 本文以一款阿里云市场历史天气查询产品为例,为你逐步介绍如何用 Python 调用 API 收集.分析与可视化数据.希 ...

  4. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  5. linux信息收集命令,linux中收集系统信息的一些命令

    摘要 腾兴网为您分享:linux中收集系统信息的一些命令,知富,掌上优云,掌上电力,悟空识字等软件知识,以及酷我音乐pc,国泰君安app,云校阅卷,一键超频软件,美折,三国群英私服,咔咔截屏录屏大师, ...

  6. python编程语言_python编程语言的简要历史

    python编程语言 The Python programming language is a general-purpose programming language that has carved ...

  7. 2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?

    2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?编程界的王者是渐落寞的Java还是大火的Python? 是不是你们也喜 ...

  8. python收集参数_python收集参数

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python参数传递时,主要有位置参数和关键字参数. 1. 位置参数:顾名思义, ...

  9. 程序语言python如何抓取信息_python中系统信息获取psutil使用详解

    #!/usr/bin/env python #coding:utf-8 import psutil import time import sys from optparse import Option ...

  10. python下载电影网址_python收集电影下载地址

    import requests import re import time class get_Address(): def get_Dy(self,pages): for n in[1,pages] ...

最新文章

  1. STM32FLASH读写程序
  2. Perl一行式:文本编解码、替换
  3. 数据结构与算法 -- 队列 ADT
  4. 虚拟磁盘类型_一起来了解一下Window10系统中虚拟硬盘的相关操作
  5. SAP CRM Distribution Chain数据模型
  6. 6.C语言迷宫程序界面版
  7. SMT精密电阻对照表
  8. TP-LINK路由器连接网线上网教程(租房必备)
  9. centos配置ipv6地址
  10. Spring+SpringMVC+Mybatis 多数据源整合
  11. 如何构建NLP Pipeline,各模块代码实现细节全在这里!
  12. DataTable操作(建表,建行,建列,添加数据)
  13. matlab绘制xy色度图函数
  14. 百度离线地图示例之一:地图展示
  15. wps页眉添加下划线
  16. explain 解析
  17. NOKOV度量动作捕捉用于多智能体协同系统等效验证实验
  18. 【云栖大会】阿里巴巴成立“达摩院” 引入顶尖科学家3年研发投入将超千亿
  19. 求索十五载:百度地图绘就的时代浪漫
  20. 云原生趋势下的迁移与容灾思考

热门文章

  1. 【图像融合】基于matlab GUI小波变换彩色图像融合(带面板)【含Matlab源码 782期】
  2. 【路径规划】基于matlab动态多群粒子群算法局部搜索路径规划【含Matlab源码 448期】
  3. file头文件_不要在头文件中使用using namespace
  4. java常用类objet,Java基础-常用API-Object类
  5. win10扬声器红叉_Win10系统的音量图标有一个红叉怎么办?
  6. python:使用split以.划分句子、对列表进行切片
  7. java集合升序降序
  8. python的难点是什么,【python基础学习】基础重点难点知识汇总
  9. java没有类_为什么Java中没有类的第一类对象?
  10. hist函数--matplotlib