2 votes

renommer des noms de fichiers tout en créant une copie ?

J'ai passé les 4 dernières heures à essayer de résoudre ce problème. Je télécharge des images à partir d'un site Web et je les stocke dans Users/Temp. Ce que je veux faire, c'est que, lorsque je télécharge une image, je vérifie le dossier Temp pour voir s'il y en a déjà avec le même nom. Si c'est le cas, je les renomme en utilisant une chaîne f et un compteur, mais je continue à les télécharger et à les enregistrer.

 for bmp in bmp_list:
        fullfilename = os.path.join(f'{dl_location}', f'{bmp}')
        dl_link = url + bmp
        urllib.request.urlretrieve(dl_link, fullfilename)

        if os.path.isfile(fullfilename):
            print('file already exists, renaming.')
            os.rename(fullfilename, f'copy{c}-{fullfilename}')
            c =+1
        else: None

Je sais que mon code crée le fichier, puis vérifie s'il est présent et, de toute évidence, il l'est puisque je viens de le copier, mais je suis assez bloqué. Toute aide serait la bienvenue !

EDIT : lorsque j'exécute ce code, j'obtiens le message d'erreur suivant

FileNotFoundError: [Errno 2] No such file or directory: '/Users/Home/Temp/CW/monty-python-(1).bmp' -> 'copy1-/Users/Home/Temp/CW/monty-python-(1).bmp'

2voto

janos Points 22603

Le problème semble être que vous préfixez une chemin absolu con copy{c} . Utilisez plutôt un suffixe :

os.rename(fullfilename, f'{fullfilename}-copy{c}')

Aussi, vous devez renommer le fichier existant avant le téléchargement. Après le téléchargement, il est trop tard, le fichier original a déjà disparu. Il faut donc déplacer le if avant l'étape de téléchargement.

Enfin, un inconvénient de l'utilisation d'un simple suffixe est qu'il se place après l'extension du nom de fichier. .bmp . Un remède simple pourrait être d'utiliser f'{fullfilename}-copy{c}.bmp' as the new name, with the drawback that there will be .bmp` deux fois. Si c'est un problème pour vous, alors vous pouvez faire mieux avec un peu plus de travail, en séparant le nom de base et l'extension, et en utilisant le nom de base pour formater le nouveau nom dans le format désiré.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X