Excel fichier perdu

Démarré par photo92, Octobre 04, 2016, 14:32:44

« précédent - suivant »

photo92

Bonjour,

J'ai besoin de votre aide
J'ai un fichier Excel sur lequel j'y vais presque tous les jours, pour mes comptages d'oiseaux
Hors cet am, voulant y travailler, mon ordi me dit qu'il est introuvable, alors que j'y étais encore dessus hier
La dernière sauvegarde qu'il m'a trouvé, c'est mars 2016. Un peu fort tout de même
Et comme bien sur j'ai fait une sauvegarde hier sur mon autre DD, formaté avant pour l'occasion, en clair j'ai perdu 6 mois de boulot

Avez vous une solution

PI, je bosse sur iMac, et Time Machine est bloqué (le top en somme)

Merci de votre aide

jamix2

Ce genre de chose m'arrive de temps en temps, en général c'est parce que j'ai glissé par mégarde le fichier ou le dossier dans un autre dossier ou répertoire. La fonction recherche permet de le retrouver.
Sinon, et je comprends bien que ça ne va pas régler ton problème, il me semble qu'avant d'en arriver à la perte possible d'un fichier qui représente 6 mois d'activité il y a des moyens simples à mettre en oeuvre.

photo92

Merci pour ta lumière

Mais d'habitude je vais le chercher dans "fichier récent" et aucun souci jusqu'à ce jour
J'ai fait la recherche avec le titre de mon fichier, et là il a trouvé celui vieux de 6 mois
Impossible à trouver alors que ça fait 3 ans que je bosse dessus sans pb

Et là, j'avoue que ça m'hérisse le poil

cdt

vulpes

as tu essayé une recherche par date ?
Impossible photographe....

marco56

Si tu connais python 3, voici un script qui t'aidera peut-être (il n'est pas de moi).
Il faut compléter la ligne :
repertoire = r"/media/.../.../"
# -*- coding: utf-8 -*-
# Python 3

import os
from datetime import datetime, timedelta, date
from fnmatch import fnmatch

class Cherchefichiers(object):
    """Permet de trouver tous les fichiers d'un répertoire et de ses
       sous-répertoire qui répond à des tests de filtrage
    """

    #========================================================================
    def __init__(self, repertoire=""):
        # Enregistre le répertoire fourni après sa normalisation
        self.repertoire = os.path.abspath(os.path.expanduser(repertoire))
        # initialise la liste des erreurs consultable en fin de recherche
        self.listerreurs = []

    #========================================================================
    def fnerreurs(self, msgerr):
        """Reçoit et enregistre les éventuels messages d'erreur de os.walk
        """
        self.listerreurs.append([msgerr.errno, msgerr.strerror, msgerr.filename])

    #========================================================================
    def cherche(self, filtre=None):
        """Trouve les fichiers du répertoire et de ses sous-répertoires
           qui satisfont le filtre donné
        """
        if filtre==None:
            filtre = lambda x: True # sans filtre donné, on accepte tout
        self.listerreurs = [] # remet à vide la liste des erreurs
        for repert, sreps, fics in os.walk(self.repertoire, onerror=self.fnerreurs):
            for fic in fics:
                fichier = os.path.join(repert, fic) # ajout du chemin
                try:
                    os.path.getsize(fichier) # uniquement pour valider l'accès
                    if filtre(fichier):
                        yield fichier
                except OSError as msgerr:
                    self.fnerreurs(msgerr)

class Filtrewildcard(object):
    """Dit si le nom de fichier donné satisfait le motif wildcard donné
       Le motif (type str) peut être plusieurs motifs séparés par des ';'
       Le fichier peut être donné avec ou sans son chemin
    """

    #========================================================================
    def __init__(self, motif="*"):
        self.motifs = motif.split(';') # plusieurs motifs séparés par ';'

    #========================================================================
    def __call__(self, fichier):
        nomfichier = os.path.basename(fichier) # élimine le chemin s'il y est
        for motif in self.motifs:
            if fnmatch(nomfichier, motif):
                return True # on a trouvé un motif qui marche!
        return False # aucun des motifs donnés n'a été satisfait

class Filtredate(object):
    """Filtre un fichier (avec son chemin) selon sa date de modification.
       La date dtime est donnée en type datetime: dtime=datetime(an,mois,jour)
       Les comparaisons de date ne tiennent pas compte des heures
    """

    #========================================================================
    def __init__(self, dtime=None):
        if dtime==None:
            self.datecible = date.today() # on prend la date d'aujourd'hui
        else:   
            self.datecible = dtime.date()
        self.epoch = datetime.utcfromtimestamp(0) # calcul de l'epoch de l'OS

    #========================================================================
    def apres(self, fichier):
        """Dit si le fichier a été modifié à la date dtime ou après
        """
        tempsfichier = os.path.getmtime(fichier)
        dtimefichier = (self.epoch + timedelta(seconds=tempsfichier))
        return dtimefichier.date() >= self.datecible

# répertoire de recherche
repertoire = r"/media/.../.../"

# filtre par wildcard: on cherche tous les scripts Python
filtrenom = Filtrewildcard("*.xls;*.xlsx")

# filtre par date: ici c'est le 17/5/2016 et après
filtredate = Filtredate(datetime(2016,5,17)).apres

# combine les 2 filtres
filtre = lambda f: filtrenom(f) and filtredate(f)

# cherche et affiche les fichiers satisfaisant aux filtres
fichiers = Cherchefichiers(repertoire)
nb = 0 # compteur
for fichier in fichiers.cherche(filtre):
    datefichier = (datetime.utcfromtimestamp(0) + timedelta(seconds=os.path.getmtime(fichier))).strftime('%Y-%m-%d')
    print(fichier, datefichier) # on ajoute la date du fichier seulement pour vérifier
    nb += 1
print()
print("Nombre de fichiers trouvés:", nb)
print()

# on affiche les erreurs s'il en a
if fichiers.listerreurs==[]:
    print("Aucune erreur")
else:
    print(len(fichiers.listerreurs), "Erreurs trouvées:")
    for erreur in fichiers.listerreurs:
        print(erreur)
Une manoeuvre réussie est une catastrophe évitée de justesse.

CTibo

c'est simple, fiable et fonctionnel le mac

alafaille

Citation de: CTibo le Octobre 11, 2016, 07:57:52
c'est simple, fiable et fonctionnel le mac
Je n'ai pas creusé ... mais à mon avis le même script passe sous Windows et Linux  ;)

CTibo

le script effectivement, doit passer.
le but est de retrouver un fichier sans l'utiliser

alafaille

Citation de: CTibo le Octobre 11, 2016, 13:18:10
le script effectivement, doit passer.
le but est de retrouver un fichier sans l'utiliser
Effectivement, je serai quand même étonné qu'il n'existe pas une recherche avec filtre date, taille etc ... sous MacOS
Et accessoirement comme on est sur une base unix ...  je pense qu'une ligne de commande avec un 'find' doit passer ( après, la syntaxe n'est pas forcément triviale ....)

vulpes

je vais répondre à la place de photo92 (qui n'a pas l'air de s'intéresser à nos réponses  ;D  ;)) puisque je lui ai posé la question sur la résolution de son problème, dans un autre fil. Voilà sa réponse :

"j'ai retrouvé 95% de mes données car je mettais envoyer sur ma bal pro
Après le reste, ne m'a pris que quelques heures

Merci "
Impossible photographe....