您好,登錄后才能下訂單哦!
Python學習教程(Python學習路線):python—收集系統信息
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'
腳本:
運行結果:
[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']
腳本:
運行結果:
[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循環遍歷
修改如上腳本:
1.4 文件md5值的校驗
找出目錄中內容相同的文件
腳本:
運行結果:
[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的區別一樣
找出占用空間大的文件
腳本:
運行結果:
[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
捕捉異常
腳本:
運行結果:
[root@huangzp3 python]# python 06.py
hello world
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。