IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

identifiant unique fichier (Systeme)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 197
    Par défaut identifiant unique fichier (Systeme)
    Bonjour,

    je sais pas si c'est dans la rubrique systeme que je dois poser la question suivante..
    Un fichier a t il un identifiant unique??
    je cherche à faire une base de données reprenant des films basés dans des dossiers, mais ces dits fichiers peuvent être déplacés et renommés, mais il reste toujours le même..
    Peut on connaitre cet évenutuel identifiant et via python s'il vous plait??

    (De préference sur OS windows dans un premier temps..)

    merci

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Salut
    Suffit d'utiliser un algorithme de signature (sha/md5) et de stocker cette signature dans ta bdd...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    je n'ai pas compris le besoin comme Sve@r.

    J'ai plutôt l'impression que le PO cherche à retrouver un fichier qui n'a pas été modifié mais qui a pu être déplacé dans l'arborescence (voire renommé) et dans ce cas je chercherais plutôt du côté de l'inode qu'on récupère via os.stat(pathname).st_ino (et qui serait mis en base).

    La doc indique que c'est aussi disponible sous Windows. J'ai fait un test sommaire : ça me ramène toujours 0 ...

    Sous Unix/linux, c'est disponible et ça fonctionne. Attention quand même : ce numéro est unique dans un système de fichiers donné.

    A l'utilisation, sous Unix/linux, la recherche du bon fichier se traduit par une recherche (find), à partir d'un racine (à déterminer/gérer) de l'inode (-inum) ou, en Python, via un os.walk.

    Attention : ça peut être longuet si l'arborescence est touffue... Il est possible aussi de mémoriser le dernier emplacement connu, le tester (inode) et ne se lancer dans le parcours de l'arborescence que si le fichier a bougé.

    Sous Windows, ...

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    @plxpy Moui. Tu remarqueras toutefois qu'on comprend la même chose, à savoir "identifier un fichier de façon absolue et stocker cet identifiant dans la bdd pour aider à le retrouver plus tard". Toi tu préconises de stocker l'inode du fichier dans la bdd et moi j'ai évoqué le md5.

    Voici grosso modo les différences entre les deux méthodes:
    1. l'inode n'est pas invariante. Elle change si le fichier change de FS. En revanche elle ne change pas même si le fichier est modifié. La recherche d'un fichier à partir de son inode est "relativement" rapide (surtout qu'on limite cette recherche au FS). Mais l'inode n'existe pas sous Windows (la fonction est autorisée mais renvoie 0)
    2. le md5 reste invariant même en cas de déplacement. En revanche il changera si le fichier est modifié (mais on parle de films donc les risques de modifs sont faibles). La recherche d'un fichier à partir de son md5 sera super longue (faut calculer le md5 de chaque fichier trouvé et le comparer). Toutefois si on mémorise en plus la taille du fichier, il est alors possible de demander à find (si on parle de lui) de se limiter aux fichiers qui ont pile cette taille. Et les fonctions de hash md5 renvoient le même résultat sous Unix et Windows


    A suivre...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    C'était le calcul systématique (mais je n'avais pas pensé à mémoriser aussi la taille du fichier) du MD5 qui me faisait peur (perfos). Je n'y avais d'autant pas pensé que j'ai, grosso modo, la même problématique avec des (grosses) images satellite ... qui ont la même taille.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Autres détails: l'inode n'est pas invariante même au sein d'un même FS. Suffit de copier f1 dans f2 puis effacer f1 et renommer f2 et on se retrouve avec un f1 ayant une inode inconnue de la bdd.
    De l'autre coté, le md5, lui, n'est pas unique (bien qu'improbable, deux fichiers différents peuvent avoir un même md5). J'avais trouvé une fois sur le net 2 fichiers html donnés en exemples. Bien que différents, leur md5 était identique. J'arrive pas à remettre la main dessus mais j'ai trouvé ceci => http://www.links.org/?p=6 et cela http://www.mathstat.dal.ca/~selinger/md5collision qui donne même une librairie permettant de créer des collisions de md5...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par Sve@r Voir le message
    Autres détails: l'inode n'est pas invariante même au sein d'un même FS. Suffit de copier f1 dans f2 puis effacer f1 et renommer f2 et on se retrouve avec un f1 ayant une inode inconnue de la bdd.
    Je confirme, et pas besoin d’effacer f1 : shutil...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def copyfileobj(fsrc, fdst, length=16*1024):
        """copy data from file-like object fsrc to file-like object fdst"""
        while 1:
            buf = fsrc.read(length)
            if not buf:
                break
            fdst.write(buf)
    ...
        with open(src, 'rb') as fsrc:
            with open(dst, 'wb') as fdst:
                copyfileobj(fsrc, fdst)
    Mon premier code perso (un gestionnaire de fichier 'sécurisé' pour éviter les mauvaises surprises. Même pas peur.) sous Python. J'ai mis un moment pour comprendre pourquoi je ne retrouvais pas mes infos...

    Par contre je partage les doutes de plxpy pour ce qui est de la lourdeur d'un algo de vérification de signature

  8. #8
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Attention aux hypothèses du PO :

    Citation Envoyé par Nico_tournai
    (...) mais ces dits fichiers peuvent être déplacés et renommés, mais il reste toujours le même..
    donc :

    Citation Envoyé par Sve@r
    Autres détails: l'inode n'est pas invariante même au sein d'un même FS. Suffit de copier f1 dans f2 puis effacer f1 et renommer f2 et on se retrouve avec un f1 ayant une inode inconnue de la bdd
    et

    Citation Envoyé par PauseKawa
    Je confirme, et pas besoin d’effacer f1 : shutil...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def copyfileobj(fsrc, fdst, length=16*1024):
        """copy data from file-like object fsrc to file-like object fdst"""
        while 1:
            buf = fsrc.read(length)
            if not buf:
                break
            fdst.write(buf)
    ...
        with open(src, 'rb') as fsrc:
            with open(dst, 'wb') as fdst:
                copyfileobj(fsrc, fdst)
    vous faites autre chose qu'un simple renommage ou un déplacement (au sein d'un même FS). Renommer ou déplacer ça ne veux pas dire faire une copie (avec un autre nom), même en effaçant ensuite le premier puis en renommant le deuxième avec le nom du premier.

    Si on s'en tient aux hypothèses du PO, le no d'inode fait parfaitement l'affaire (encore une fois, au sein d'un même système de fichiers):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> open('film.avi','w').close()
    >>> os.stat('film.avi').st_ino
    56969L
    >>>
    >>> # simple renommage
    ... os.rename('film.avi','mon_film_prefere.avi')
    >>> os.stat('mon_film_prefere.avi').st_ino
    56969L
    >>> 
    >>> # renommage et deplacement dans un repertoire
    ... os.mkdir("mes_preferes")
    >>> os.rename("mon_film_prefere.avi","mes_preferes/prefere_no_1.avi")
    >>> os.stat("mes_preferes/prefere_no_1.avi").st_ino
    56969L
    Je peux même le modifier si le coeur m'en dit, le no d'inode ne bronche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> f = open('mes_preferes/prefere_no_1.avi','r+')
    >>> print >> f, "blabla"
    >>> f.close()
    >>> 
    >>> os.stat("mes_preferes/prefere_no_1.avi").st_ino
    56969L

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par plxpy Voir le message
    Attention aux hypothèses du PO :

    vous faites autre chose qu'un simple renommage ou un déplacement (au sein d'un même FS). Renommer ou déplacer ça ne veux pas dire faire une copie (avec un autre nom), même en effaçant ensuite le premier puis en renommant le deuxième avec le nom du premier.
    Ca c'est pas sympa. On essaye en toute honnêteté d'envisager les conséquences de tel ou tel choix sans à priori (parce que de mon coté j'ai aussi trouvé beaucoup d'inconvénients à l'utilisation du md5 dont la lourdeur de la recherche en est le premier) et tu utilises une phrase du PO (pas forcément écrite avec toute la rigueur d'un cahier des charges) comme argument supplémentaire pour affirmer que ta solution est la meilleure.
    Surtout que généralement ce n'est pas un mal d'envisager aussi d'autres possibilités à laquelle le donneur d'ordres originel n'a peut-être pas immédiatement pensé ; ça évite beaucoup de mauvaises surprises à terme (et là je parle par expérience).

    Citation Envoyé par plxpy Voir le message
    Si on s'en tient aux hypothèses du PO, le no d'inode fait parfaitement l'affaire (encore une fois, au sein d'un même système de fichiers):
    Ben si on regarde comme tu l'as fait les demandes du PO (qui pourrait quand-même aussi revenir de temps en temps donner son avis)...
    Citation Envoyé par Nico_tournai Voir le message
    (De préference sur OS windows dans un premier temps..)
    ...alors on dirait que non...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 197
    Par défaut
    merci à tous d'échanger positivement sur le sujet

    Désolé de ne répondre que maintenant.. Madame boude si je touche un ordinateur le weekend

    Le n° inode si j'ai bien compris n'existe pas sous windows.
    Le MD5 m'interesse, reste à voir la durée de calcul du MD5. Tant que ca depasse pas la seconde, c'est acceptable.
    Après la recherche, si on déplace ou renomme un fichier, je pourrais faire la recherche sur la taille du fichier (sauvé au préalable) et derrière calculer le MD5.

    Je vais regarder tout ca pour le MD5 sous python

    merci à tous

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Nico_tournai Voir le message
    Après la recherche, si on déplace ou renomme un fichier, je pourrais faire la recherche sur la taille du fichier (sauvé au préalable) et derrière calculer le MD5.
    En fait, j'avais évoqué cette possibilité de conserver la taille parce que la taille est une information stockée dans l'inode. Et donc la recherche d'un fichier en filtrant sur sa taille est super rapide.
    Malheureusement l'inode n'existant pas sous zindow, cette option n'apportera que très peu d'avantage (faudra alors calculer la taille de chaque fichier examiné)...

    Sinon j'avais développé pour moi cette fonction renvoyant le md5 d'un fichier
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import hashlib
    def md5sum(
    		file):
     
    	# Ouverture du fichier
    	fp=open(file, "rb")
     
    	# Initialisation md5
    	md5=hashlib.md5()
     
    	# Lecture fichier et calcul md5
    	while True:
    		data=fp.read(10240)
    		if data == "": break
    		md5.update(data)
    	# while
     
    	# Fermeture fichier - Renvoi calcul md5
    	fp.close()
    	return md5.hexdigest()
    # md5sum
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par plxpy Voir le message
    vous faites autre chose qu'un simple renommage ou un déplacement (au sein d'un même FS). Renommer ou déplacer ça ne veux pas dire faire une copie (avec un autre nom), même en effaçant ensuite le premier puis en renommant le deuxième avec le nom du premier.
    Qu'importe : Que savait vous de ce que fais 'vraiment' l'os/le programme du cut and paste ? L'exemple donné viens du code de shutil.py

    @+

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Sous windows les fichiers ont un GUID (à la place d'un UUID mais le G de "global" équivaut fonctionnellement au U d'Universal).
    C'est plutôt galère de plonger dans les API windows pour voir comment çà fonctionne et mettre au point un programme Python qui puisse "récupérer" çà.

    Il y a un brico de Tim Golden qui récupère ce GUID ici
    Il y a aussi une API Windows (OpenFileById) pour aller ouvrir le fichier suivant son ident.

    Après, si on reprend la question de base:
    je cherche à faire une base de données reprenant des films basés dans des dossiers, mais ces dits fichiers peuvent être déplacés et renommés, mais il reste toujours le même...
    Les histoires de hash ont l'avantage de fonctionner pour n'importe quel type de fichiers...
    Avec des fichiers "video", il faut peut être regarder les metadata inclues dans leur "format" et voir si on peut construire un identifiant unique à partir de là: (mediainfo récupère tout çà)

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/01/2015, 21h39
  2. Réponses: 2
    Dernier message: 07/11/2009, 12h42
  3. Réponses: 1
    Dernier message: 23/10/2009, 23h12
  4. Identifier les fichiers protégés du system
    Par sduh1 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/07/2007, 17h49
  5. [fichier] trouver un identifiant unique
    Par FFF dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 16/10/2005, 23h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo