Supposons que j'ai un set
de fichier renomme opérations:Changement de nom ensemble de fichiers lorsque les anciens conflits de noms avec de nouveaux noms dans python3
renames={(current_1,new_1),(current_2,new_2),...}
Il est garanti que les fichiers current_1,current_2,...
existent et que les nouveaux fichiers new_1,new_2,...
sont uniques. Tous les fichiers sont des instances de pathlib.Path
.
Cependant, ils peuvent être des fichiers qui sont actuellement nommés car un autre fichier doit être renommé: il peut exister une instance de current_i==new_j
.
Quelle serait une manière élégante d'implémenter les opérations de renommer? Notez que je ne peux pas simplement parcourir renames
et renommer chaque fichier, car je dois me préparer à une situation où le nouveau nom entre en conflit avec le nom d'un fichier qui doit encore être renommé.
Je suis spécifiquement à la recherche d'une implémentation en Python3, et j'aimerais que les renames soient conservées set
dans le formulaire ci-dessus.
Une façon simple est de préfixe temporairement les fichiers:
temporal_prefix="a big string guaranteed not to appear in file names"
for current,new in renames:
current.rename(current.with_name(temporal_prefix+current.name))
for current,new in renames:
current.with_name(temporal_prefix+current.name).rename(new)
Mais ce n'est pas très élégant et il faut jusqu'à deux fois les opérations de fichiers nécessaires. Et trouver un bon préfixe peut être un problème en soi. Est-il possible de faire cela en une boucle, en utilisant le nombre minimum d'opérations sur les fichiers?
Avec la persistance et le travail acharné, vous allez probablement résoudre ce problème. – wwii