2013-10-27 117 views
1

我有一個目錄中的一些文件,Python的文件重命名

file_IL.txt
file_IL.csv
file_NY.txt
file_NY.csv

我將讓他們得到他們重新命名一個序列號。例如,

file_IL.txt_001
file_IL.csv_001
file_NY.txt_002
file_NY.csv_002

我寫了下面的Python代碼

def __init__(self): 

    self.indir = "C:\Files" 



def __call__(self): 

    found = glob.glob(self.indir + '/file*') 

    length = len(glob.glob(self.indir + '/file*')) 
    print length 
    count = 000 

    for num in (glob.glob(self.indir + '/file*')): 
     count = count + 1 
     count = str(count) 
     print count 
     shutil.copy(num, num+'_'+count) 
     print num 
     count = int(count) 

但是,這是給我一個結果如下所示,

file_IL.txt_001
file_IL.csv_002
file_NY.txt_003
file_NY.csv_004

有人可以幫我修改上面的Python腳本符合我的要求是什麼?我是Python的新手,我不確定如何實現它。

回答

3

最好的方法是將擴展名和計數存儲在字典中。

def __call__(self): 

    found = glob.glob(self.indir + '/file*') 
    length = len(found) 
    counts = {} 

    for num in found: 
     ext = num.rsplit(".",1)[-1] # Right split to get the extension 
     count = counts.get(ext,0) + 1 # get the count, or the default of 0 and add 1 
     shutil.copy(num, num+'_'+'%03d' % count) # Fill to 3 zeros 
     counts[ext] = count   # Store the new count 
+0

謝謝。只有一個錯誤,TypeError:不可用類型:'list'。你能告訴我如何解決這個問題嗎?它在count = counts.get(ext,0)+1 – user1345260

+0

@ user1345260固定。只需要正確拉取擴展名,而不是將'count'強制轉換爲字符串。 – 2013-10-27 23:15:29

+0

@LegoStormtroopr:'length = len(found)',而不是重複glob調用,是嗎? – Edward