Tengo un grupo de archivos llamados comotítulo_diciembre_palabra1_palabra2.pngy desea iterar a través del directorio e intercambiar word1
y word2
dentro de cada archivo.
es decir, ir de"button_december_state_pressed.png" -> "button_december_pressed_state.png"
¿Alguna sugerencia sobre cómo podría lograr esto?
La mayoría de los programas por lotes que he encontrado para OS X no pueden especificar un carácter para dividir las palabras y esperaba que alguien pudiera ayudarme con un script rápido para resolver esto.
Respuesta1
Pruebe rename
util. Utiliza sed
sintaxis para reemplazar nombres.
rename 's/old-name/new-name/' files
El comando se verá así
rename 's/$(.*december_)(.*)_(.*)(.png)^/\1\3_\2\4/' *.png
Respuesta2
prueba el pequeñocambiar nombre-regex(sin instalación):
rr *_*_*_*.png "(.*)_(\w+)_(\w+).png" "$1_$3_$2.png"
Respuesta3
Editar: aquí hay un código por lotes para hacerlo. Copie este código y colóquelo en un archivo "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
Pongo un echo
antes ren
de que puedas probar el código sin problema. Si la salida es correcta, retire elecho
Respuesta4
No es bonito, pero creo que hace lo que quieres si todos tus archivos están en la misma carpeta.
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']
¿O puedes usar formato y/o un bucle 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]))