2016-07-26 10 views
1

Скажем, у меня есть папка с n csv файлами, которые я хочу переименовать. Новое имя файла будет что-то вроде ABxxxx, с xxxx будучи прогрессивным числом от 1 до 1000.Python: как сохранить расширение файла при переименовании файлов с помощью os?

При этом, как я могу сохранить первоначальное расширение файла, которое csv?

То, что я сделал до сих пор изменил имена файлов, но подрезают выдвижную:

directory=r'C:\Me\MyDir' 
subdir=[x[0] for x in os.walk(directory)] 
subdir.pop(0) 

for i in subdir: 
    temp_dir=r''+i 
    os.chdir(temp_dir) 
    a='A' 
    b='B' 
    for file in glob.glob("*.csv"): 
     for i in range(1,1001): 
      newname=a+b+i 
     os.rename(file,newname) 
+3

Добавить '.csv' в' новое имя'? – Suever

+0

Как 'newname +". Csv "'? – FaCoffee

+0

получить последние четыре символа имени файла - '' 'ext = имя_файла [-4:]' '', назначить его переменной, использовать эту переменную для создания нового имени файла. – wwii

ответ

5

Вы можете просто добавить '.csv' к новому имени файла:

os.rename(file, newname + '.csv') 

В общем (для любой тип файла), лучшим способом сделать это было бы сначала получить существующее расширение, используя os.path.splitext, а затем добавить это к новому имени файла.

oldext = os.path.splitext(file)[1] 
os.rename(file, newname + oldext) 
1

Использование os.path.splitext построить кортеж (basepath, extension) и enumerate, чтобы сгенерировать "uniquifier". Теперь вы можете просто использовать форматирование ванильной строки, чтобы склеить ее вместе.

for i in subdir: 
    temp_dir=r''+i 
    os.chdir(temp_dir) 
    a='A' 
    b='B' 
    for idx, file in enumerate(glob.glob("*.csv")): 
     os.rename(file,'{0}{2}{1}'.format(*(os.path.splitext(file) + (idx,)))) 

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

  • Нет связанных вопросов^_^