使用python處理文件

背景:

260個學生,分52組,每組1-6人,交作業時只需要一個人代表整個team交,有多次作業,每次可以由不同的人提交。

文件名格式爲:學號_姓名。我只負責其中9組,所以要從52個組內挑出我負責的9組,每次對着40多個人的名單從50多個文件名中檢索出其中9個,太麻煩。

於是想用腳本挑出我自己負責的那部分,可是又不會windows下的shell,其實linux下也不會。。。。

剛好學了python,就打算用python處理一下。


代碼如下:

import os
name = "homework2" ###select files in which dir,需要處理的文件所在文件夾
####我負責的9個組的學號,每行一個team
tasks=(111250116,111250158,111250196,111250198,111250222,
       111250199,111250200,111250210,111250211,128351018,
       111250114,111250206,111250213,111250242,111250244,
       111250153,111250171,111250214,101250032,101250038,
       111250184,111250189,111250205,111250215,111250223,
       111250207,111250212,111250216,111250217,111250232,
       111250209,111250218,111250231,111250236,101250202,
       111250202,111250228,111250235,111250243,111250252,
       111250226,111250227,111250229,111250230,111250240)

####定義一個查找函數,查找給定的學號是不是在我負責的名單裏,
####在就返回在元組裏的編號,否則返回-1
def find(num):
    n=0
    while n<len(tasks):
        if(tasks[n]==num):
            return n;
        n = n+1
    return -1

files = os.listdir(name)###列出目錄下所有文件
curdir=os.path.join(os.getcwd(),name)###得到需要處理文件所在目錄絕對路徑
print curdir

for f in files:
    #print f
    num = (int)(str(f)[:9])####前9位爲學號
    res = find(num)
    fp = os.path.join(curdir,f)###當前處理的文件的絕對路徑
    #print fp
    if res==-1: ##not finds
        os.remove(fp) ##delete file刪除文件,參數需要爲絕對路徑
        print "remove "+f+"..."
    else: ###rename to add team id 
        fn = "team_" + str((int)(res/5+37)) + "_" + f  ##文件名加所在組前綴
        fnp= os.path.join(curdir,fn)
        os.rename(fp,fnp)###重命名文件
        print "rename "+fn

#print files

print "done."
temp = input("press ENTER to exit...")

運行效果很好,比手工查找效率高的多。。。

腳本真好用。。。比c/c++/java之類的簡單的多。。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章