CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] - Bypasser des conditions

Karysmatyk
Karysmatyk
Niveau 22
24 octobre 2022 à 19:29:45

Bonjour,

Désolé pour le titre pas très parlant. Je commence à apprendre Python, et me suis lancé sur un script de sauvegarde incrémentielle. (je galère mais je progresse petit à petit :hap:)
Une sauvegarde full par semaine + 6 incrémentales

Voici ce que j'aimerais faire :
for file in list_source_files: if file in list_file_incremental_6: same_file = filecmp.cmp(source.joinpath(file), Path(settings.get("6nd_incr_path")).joinpath(file)) if same_file == False: shutil.copy2(source.joinpath(file), destination_backup.joinpath(file))

Pour chaque fichier présent dans le répertoire source, je regarde s'il est présent dans ma dernière sauvegarde incrémentale. S'il est présent, je comparer les fichiers. Si le fichier est différent je le copie dans ma destination.

Je voudrais que si cette condition s'avère vraie, le prochain fichier soit vérifié (file) in list_source_files. Et non pas que le script continue à regarder dans chaque répertoire d'incrémentales (et donc potentiellement écraser le fichier précédemment copié dans la destination)

J'espère être clair :peur:
Merci d'avance

Message édité le 24 octobre 2022 à 19:30:44 par Karysmatyk
Karysmatyk
Karysmatyk
Niveau 22
24 octobre 2022 à 20:13:12

J'ai réussi à faire ce que je voulais avec une boucle while :
for file in list_source_files: file_found = False while(file_found == False): if file in list_file_incremental_6: same_file = filecmp.cmp(source.joinpath(file), Path(settings.get("6nd_incr_path")).joinpath(file)) file_found = True if same_file == False: shutil.copy2(source.joinpath(file), destination_backup.joinpath(file)) file_found = True if file in list_file_incremental_5: same_file = filecmp.cmp(source.joinpath(file), Path(settings.get("5nd_incr_path")).joinpath(file)) file_found = True if same_file == False: shutil.copy2(source.joinpath(file), destination_backup.joinpath(file)) file_found = True if file in list_file_incremental_4: same_file = filecmp.cmp(source.joinpath(file), Path(settings.get("4nd_incr_path")).joinpath(file)) file_found = True if same_file == False: shutil.copy2(source.joinpath(file), destination_backup.joinpath(file)) file_found = True if file in list_file_incremental_3: same_file = filecmp.cmp(source.joinpath(file), Path(settings.get("3nd_incr_path")).joinpath(file)) file_found = True if same_file == False: shutil.copy2(source.joinpath(file), destination_backup.joinpath(file)) file_found = True if file in list_file_incremental_2: same_file = filecmp.cmp(source.joinpath(file), Path(settings.get("2nd_incr_path")).joinpath(file)) file_found = True if same_file == False: shutil.copy2(source.joinpath(file), destination_backup.joinpath(file)) file_found = True if file in list_file_incremental_1: same_file = filecmp.cmp(source.joinpath(file), Path(settings.get("1st_incr_path")).joinpath(file)) file_found = True if same_file == False: shutil.copy2(source.joinpath(file), destination_backup.joinpath(file)) file_found = True if file in list_full_files: same_file = filecmp.cmp(source.joinpath(file), Path(settings.get("last_full_path")).joinpath(file)) file_found = True if same_file == False: shutil.copy2(source.joinpath(file), destination_backup.joinpath(file)) file_found = True

Bon le code est horriblement répétitif, pas joli. Je vais voir si je peux trouver plus élégant comme méthode, j'ai le cerveau en compote aujourdh'ui, je verrais demain. Si quelques à des pistes (sans forcément me donner une solution toute faite, je suis prenneur)

Magrozz
Magrozz
Niveau 7
24 octobre 2022 à 23:54:29

:malade: + balise code ratée

Karysmatyk
Karysmatyk
Niveau 22
25 octobre 2022 à 12:12:27

Oops, la balise ne fonctionne pas avec un code trop "long", voici le code propre sur Pastebin : https://pastebin.com/jw73QRXs

On est d'accord c'est moche, très moche. Ce code ne fonctionne que pour des chaines de sauvegarde de 7 jours de plus. Rien n'est dynamique. Une piste pour écrire du code plus flexible et logique ?

Karysmatyk
Karysmatyk
Niveau 22
25 octobre 2022 à 23:51:25

Après quelques heures de réflexion, j'ai trouvé bien plus élégant en créant une fonction : https://pastebin.com/1NKx0Veg
C'est flexible comme ça, peut importe la taille de la chaine de backup choisie ça compare le fichier de la dernière incrémentale à la source, si différent = On copie
Si le fichier n'est pas présent on remonte chaque incrémentale en faisant la comparaison, et enfin, arrivé en bout de chaine on comparera à la sauvegarde full.

Il y a certainement plus optimisé comme code, mais pour un début, plutôt content de moi :hap:

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment