2016-12-06 2 views
1

Я видел базовый код Python для замены имени файла в каталоге, но они всегда для известных строк, но как бы вы удалили случайные символы определенной длины?удаление строки из четырех символов спереди и тринадцать символов с конца имени файла

Будет ли это работать?

newFileName = file.replace([-5:], "") 

Как я пытаюсь удалить последние пять символов из имени файла, не удаляя расширение.

Вот обновление: Я пытаюсь сделать это:

DMC-CIWS15-AAAA-A00-00-0000-00A-018A-D_014-00_EN-US.xml 

в

CIWS15-AAAA-A00-00-0000-00A-018A-D.xml 

, который удаляет DMC- и _014-00_EN-US с конца.

Мне нужно добавить это в код, который исправит каталог файлов.

+4

Просто нарежьте строку: newFileName = файл [0: -5] –

+0

@MaximilianPeters, что бы не отрезают расширение? – Steven

+2

Если вам нужно сохранить расширение, используйте rfind: newFileName = file [0: file.rfind ('.')] –

ответ

2

Эта проблема (если я ее правильно понимаю) имеет четкое разделение. Удалите расширение, удалите X-символы с начала и конца, а затем добавьте расширение еще раз, чтобы получить окончательный ответ.

import os 

oldFileName = 'xxxx-filename-xxxxx.XML' 
# remove n chars in beginning, m chars at end 
n = 5 
m = 6 
name, ext = os.path.splitext(oldFileName) 
# splice away the chars, and add the extension 
newFileName = '{}{}'.format(name[0:-m][n:], ext) 
# newFileName == 'filename.XML' 

Так что в вашем случае, вы будете использовать n=4 и m=13.

Если вы не знаете длину, но знаете, что хотите все, вплоть до первого штриха, а также все после первого подчеркивания (что означало бы, что не может быть подчеркивания в обычном имени файла или первая часть), это будет работать также:

import os 

oldFileName = 'DMC-CIWS15-AAAA-A00-00-0000-00A-018A-D_014-00_EN-US.xml' 
name, ext = os.path.splitext(oldFileName) 
newFileName = '{}{}'.format(name[name.index('-')+1:name.index('_')], ext) 
# newFileName == 'CIWS15-AAAA-A00-00-0000-00A-018A-D.xml' 

И даже если картина что-то другое, но есть шаблон, вы можете закодировать в соответствии с ней, как я здесь.

+0

Я уточнил вопрос, чтобы быть более конкретным, чтобы вы могли вносить любые необходимые изменения в свой ответ, если это необходимо. Спасибо за вашу помощь. – Steven

+0

Я немного изменил свой ответ, но считаю, что мое решение было достаточно общим, чтобы работать на ваш случай, если длина исправлена.Тем не менее, более приятным решением было бы отфильтровать первую тире и все после первого подчеркивания, если это представляет формат. – Matthias

+0

Это работает и является красивым кодом. Спасибо! – Steven

0

Это не хорошо, но я надеюсь, что это работает для вас Тхо

Если вы знаете, файлы, которые вы хотите переименовать все имеют одинаковую длину, вы можете попробовать:

>>>file = 'DMC-CIWS15-AAAA-A00-00-0000-00A-018A-D_014-00_EN-US.xml' 
>>>ext = file[51:] 
>>>newFile = file[4:38]+ext 

при печати NewFile теперь у вас есть:

>>>print(newFile) 
CIWS15-AAAA-A00-00-0000-00A-018A-D.xml 
Смежные вопросы