У меня есть группа файлов с именем title_de December_word1_word2.png, и я хочу перебрать каталог и поменять местами word1 и word2 в каждом файле.

т. е. перейти от "button_december_state_pressed.png" -> "button_december_pressed_state.png"

Любое предложение о том, как я мог бы сделать это?

Большинство пакетных программ, которые я нашел для OS X, не могут указать символ для разбивки слов, и я надеялся, что кто-нибудь поможет мне с быстрым сценарием, чтобы решить эту проблему.

4 ответа4

0

Попробуйте rename util. Он использует синтаксис sed для замены имен

rename 's/old-name/new-name/' files

Команда будет выглядеть примерно так

 rename 's/$(.*december_)(.*)_(.*)(.png)^/\1\3_\2\4/' *.png
0

Изменить: вот пакетный код, чтобы сделать это. Скопируйте этот код и поместите его в файл "Swap.bat"

@ECHO OFF

for %%a in (*.png) do (
     for /f "tokens=1,2,3,4 delims=_" %%b in ('echo %%~na') do (
        echo ren "%%a" "%%b_%%c_%%e_%%d%%~xa"))
Pause

Я положил echo до ren , что вы можете проверить код без проблем. Если на выходе все в порядке, уберите echo

0

Это не красиво, но я думаю, что делает то, что вы хотите, если все ваши файлы находятся в одной папке

import os

files = os.listdir(os.getcwd())

[os.rename(i,
    '_'.join([i.split('_')[0],
        i.split('_')[1],
        i.split('_')[3][:-4],
        i.split('_')[2]+
        '.png'])) for i in files if len(i.split('_')) == 4 and i[-3:] == 'png']

или вы можете использовать формат и / или цикл?

for fileName in files:
    if fileName[-4:] == '.png':
        words = fileName[:-4].split('_')
        os.rename(fileName,
            '{0}_{1}_{2}_{3}.png'.format(words[0],
                words[1],
                words[3],
                words[2]))
0

попробуйте небольшое переименование-регулярное выражение (без установки):

rr *_*_*_*.png "(.*)_(\w+)_(\w+).png" "$1_$3_$2.png"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .