У меня есть группа файлов с именами типаtitle_december_word1_word2.pngи хотите выполнить итерацию по каталогу и подкачку word1
внутри word2
каждого файла.
т.е. перейти от"button_december_state_pressed.png" -> "button_december_pressed_state.png"
Есть ли у вас какие-нибудь предложения, как это можно сделать?
Большинство пакетных программ, которые я нашел для OS X, не могут указать символ для разбиения слов, и я надеялся, что кто-нибудь сможет помочь мне с быстрым скриптом для решения этой проблемы.
решение1
Попробуйте rename
util. Он использует sed
синтаксис для замены имен
rename 's/old-name/new-name/' files
Команда будет выглядеть примерно так
rename 's/$(.*december_)(.*)_(.*)(.png)^/\1\3_\2\4/' *.png
решение2
попробуйте маленькийпереименовать-регулярное выражение(без установки):
rr *_*_*_*.png "(.*)_(\w+)_(\w+).png" "$1_$3_$2.png"
решение3
Редактировать: Вот пакетный код, чтобы сделать это. Скопируйте этот код и поместите его в файл "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
решение4
Это не очень красиво, но я думаю, что это то, что вам нужно, если все ваши файлы находятся в одной папке.
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?
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]))