歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

一個小程序的Python和Bash版本比較

最近有一個小需求:在一個目錄下有很多文件,每個文件的第一行是BEGIN開頭的,最後一行是END開頭的,中間每一行有多列,數量不等,第一列稱為"DN", 第二列稱為"CV",DN和CV的聯合作為主鍵,現在需要檢測文件中是否有重復的DN-CV。

於是寫了個簡單的python程序

#! /usr/bin/python import os import sys cmd = "cat /home/zhangj/hosts/* | grep -v BEGIN | grep -v END" def check_dc_line():  has_duplicate = False  dc_set = set()  for dc_line in os.popen(cmd, 'r').readlines():   dc_token = dc_line.split()   dn = dc_token[0]   cv = dc_token[1]   dc = dn + "," + cv   if dc in dc_set:    print "duplicate dc found:", dc    has_duplicate = True   else:    dc_set.add(dc)  return has_duplicate if not check_dc_line():     print "no duplicate dc"

對於250個文件,共60萬行的數據,過濾一遍約1.67秒

有點不甘心這個效率,於是又寫了一個同樣功能的shell腳本

#! /bin/bash cat /home/zhangj/hosts/* | grep -v BEGIN | grep -v END | awk '  BEGIN {   has_duplicate = 0  }  {   dc = $1","$2;    if (dc in dc_set)    {    print "duplicate dc found"dc     has_duplicate = 1     else {    dc_set[dc] = 1   }  }  END {   if (has_duplicate ==0)   {    print "no duplicate dc found"   }  } '

為了進一步比較,重復了10次實驗。

  use python (second) use bash (second)   1.74 1.548   1.698 1.423   1.674 1.408   1.718 1.286   1.757 1.292   1.600 1.285   1.647 1.335   1.661 1.316   1.654 1.288   1.647 1.288 average 1.670 1.347

可讀性上看,python更簡潔優雅一些。不過執行效率略有出乎意料。shell貌似更快一些……

《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved