2009年9月3日 星期四

python 比較不同資料夾的部份內容


最近再看學長的code 我發現有點小問題  就是他的reposiroty最早的版本不是他一開始沒改的版本
喔  不 所以說我只好手動來找是哪些檔改過了  我當然知道diff是我最好的朋友
不過我不知道要怎麼比整個資料夾 我感覺bash script一定可以最這件事  但是現在離我上次寫bash script有點久耶
雖然書在旁邊  完全不沒有想去翻他的慾望  難道我真的要一個一個手動打diff比嗎
其實也可以啦 反正大不了一百多個  那我就不用寫這篇了....

想想python好像蠻強大的  用用看吧
以下就是簡單的python code
1
2
3
4
5
6
7
8
9
#! /usr/bin/python
import os
import re
fileName = os.listdir("~/kernel_new/");
firDir = "~/kernel_new/"
secDir = "~/kernel/"
for oneName in fileName:
        if re.match(".*cpp", oneName):
                reslut = os.system("diff -c " + firDir + oneName + " " + secDir + oneName); 
主要用到的就是os跟re這兩個module 簡單介紹一下
os就是一些平常在bash可以打得一些command 其實就是一些system programming會出現的東西
re就是reguler expression的縮寫  這就是正規表示法 就是有*,?,.,[]等等的符號的東西  他是用來更方便描述string特性
程式一開始先用os.listdir()取得新的資料夾裡面有什麼
再來設定兩個資料夾是哪兩個資料夾(這裡好像有點重複到)
接者將一個個檔名抓出來比較看看結尾是不是cpp 是的話再用os.system去call diff來作比較
這樣簡單的一個檔案就可以比較整個資料夾的某些檔案

在這裡我曾經犯了一個錯誤  就是我忘了reguler expression是什麼了  跟bash的wildcard混在一起了
我還以為可以打*cpp就得到所有cpp結尾的檔案 當然是不行的 因為在*前面一定要接是什麼東西要重複
還又就是re.match()是只要string前面match就可以了  不需要全部的string

沒有留言:

張貼留言