Supondo que os nomes na lista não incluam espaços , além de entre os nomes, o script abaixo renomeará as pastas de um arquivo de texto recursivamente . Ele irá ler as linhas do arquivo, dividi-las em duas (nome novo, nome antigo), renomear as pastas que são nomeadas pela string segundo na linha, na primeira string na linha.
Ele fará isso, como mencionado recursivamente , de baixo para cima na árvore de diretórios. Isso evita problemas no script, tentando renomear pastas em pastas pai possivelmente já renomeadas.
#!/usr/bin/env python
import os
import shutil
# -- set the (absolute) path to the targeted folder below
dr = "/home/jacob/Bureaublad/testfolder"
# -- set the path to the textfiles below
ren = "/home/jacob/Bureaublad/testfolder/renfile.txt"
renlist = [cpl for cpl in [l.split() for l in open(ren).readlines()] if cpl]
currnames = [r[1] for r in renlist]
for root, dirs, files in os.walk(dr, topdown = False):
for dr in dirs:
try:
# look up the name, pass if not in the list
i = currnames.index(dr)
except ValueError:
pass
else:
newname = renlist[i][0]
shutil.move(root+"/"+dr, root+"/"+newname)
Como usar
- Copie o script em um arquivo vazio (em um editor texto simples ), salve-o como
rename.py
- Na seção head do script, defina os caminhos reais para o arquivo de texto e o diretório
-
execute-o pelo comando (em um terminal):
python /path/to/rename.py
Explicação
O script:
- cria uma lista de nomes- casais : newname / oldname
- usando o
os.walk()
do python, ele analisa seus diretórios de forma recursiva, de baixo para cima. - Se o nome da pasta corresponder ao segundo item de um casal de nomes, ele renomeia a pasta para o primeiro nome.
- Se o nome da pasta não estiver listado, ele não será alterado.