2013-10-27 5 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: unhashable type: 'list'. Не могли бы вы рассказать мне, как это исправить? Он находится в count = counts.get (ext, 0) +1 – user1345260

+0

@ user1345260 Исправлено. Просто нужно правильно вытянуть расширение, а не переводить 'count' в строку. –

+0

@LegoStormtroopr: 'length = len (found)', а не дублирование вызова glob, да? – Edward

Смежные вопросы