0
votes

Pourquoi les fichiers sont-ils supprimés lorsque je les renommerai à l'aide de ce script Python?

J'ai créé ce programme pour renommer tous mes noms de fonds d'écran aléatoire à wallpaper1 , wallpaper2 et ainsi de suite à l'aide de ce code: xxx

Mais chaque fois que j'exécute le code, les demi-fichiers sont renommés que les autres deviennent supprimés en permanence.


4 commentaires

Si vous le renommez à quelque chose qui existe déjà, il remplacera l'ancien fichier. Peut-être que c'est le cas?


Oui, j'imagine si vous exécutez ce code plus d'une fois quelque chose de mauvais pourrait arriver.


@quamrana vous avez raison mais pourquoi cela se produit et quelle est la solution s'il vous plaît aider


Qu'en est-il des réponses ci-dessous? Ils semblent offrir des suggestions positives.


4 Réponses :


1
votes

Il est préférable de sauvegarder les fichiers renommés dans un dossier séparé et vous pouvez utiliser énumérer () pour les numéros: xxx

Assurez-vous d'avoir un autre dossier créé appelé wallpapers2 dans le dossier Photos.


0 commentaires

1
votes

(suggérant un changement plutôt petit ici, mais comme une réponse parce qu'il est difficile de le montrer sans ambiguïté via les commentaires.) em>

Insérez un chèque si le nouveau nom de fichier existe, et si oui, Continuez ensuite à incrémenter le nombre jusqu'à ce que vous en obteniez un qui ne le fait pas. Cela se protégera contre les fichiers d'écrasement déjà renommés lors de l'exécution du même script précédemment. P>

import os
path = os.chdir("/home/samipkarki/Pictures/Wallpapers")
value = 1
for file in os.listdir("path"):
    new_filename = f'wallpaper{value}.jpg'
    while os.path.exists(new_filename):
        value += 1
        new_filename = f'wallpaper{value}.jpg'
    os.rename(file, new_filename)
    value += 1


1 commentaires

Merci de votre suggestion, cela m'a vraiment aidé à apprendre de nouvelles choses et à comprendre le bon code, mais le seul problème que je suis confronté à votre code était si je le faisais une fois que cela le renommerait, mais après la plus grande valeur de l'exécution précédente et, si, Si je courais à nouveau, cela me donnerait la sortie attendue.so, j'ai modifié le code un peu et maintenant ça marche parfaitement bien.



0
votes

Ceci est un détail où il dépend d'une plate-forme de bits. Si vous utilisiez Windows, vous auriez obtenu un FileExistError CODE> Exception, mais pas sur UNIX.

C'est ce que la documentation dit: P>

Renommez le fichier ou le répertoire SRC à DST. Si DST existe, l'opération échouera avec une sous-classe OsError dans un certain nombre de cas: P>

sur Windows, si DST existe une FileExistsError est toujours soulevée. P>

sur UNIX, si SRC est un fichier et un fichier DST est un répertoire ou vice-versa, une isadirectoryerror ou une notadirectoryError sera soulevée respectivement. Si les deux sont des répertoires et la DST est vide, DST sera remplacé silencieusement. Si DST est un répertoire non vide, un OsError est soulevé. Si les deux sont des fichiers, DST sera remplacé silencieusement si l'utilisateur a la permission. strong> L'opération peut échouer sur certaines saveurs UNIX si SRC et DST sont sur différents systèmes de fichiers. En cas de succès, le renommage sera une opération atomique (il s'agit d'une exigence de POSIX). P> blockquote>

Vous devez donc effectuer une vérification manuelle si le fichier existe, et si cela le fait, gérez-le d'une manière ou d'une autre. P>

Une chose qui n'affectera probablement pas votre programme est que Un chèque sur cette forme (de la réponse de Alaniwi) Formulaire: P>

while True:
    value += 1
    new_filename = f'wallpaper{value}.jpg'

    try:
        os.open(new_filename, os.O_CREAT | os.O_EXCL)
        break
    except FileExistsError:
        pass


0 commentaires

0
votes

Je trouve la réponse en raison de la suggestion de @Awani. Cela a fonctionné pour moi si vous avez repéré un problème s'il vous plaît corrigez-moi. Le problème a été mentionné dans la réponse que le code remplace le fichier existant afin que ce code vérifie si le fichier existe si celui-ci existe alors, il ne sera pas simplement renommé qu'il le renommera.

import os
path = os.chdir("/home/samipkarki/Pictures/Wallpapers")
value = 1
for file in os.listdir(path):
    print(os.listdir(path))
    new_filename = f'wallpaper{value}.jpg'
    if os.path.exists(new_filename):
        pass
    else:
        os.rename(file, new_filename)
        value += 1


0 commentaires