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 :

Nom de fichier trop long


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Technicien r�seaux et t�l�coms
    Inscrit en
    Mai 2012
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Technicien r�seaux et t�l�coms
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 70
    Par d�faut Nom de fichier trop long
    Bonjour,

    Je me tire les cheveux depuis trois jours sur ce probl�me !!

    Je suis sous Windows8 avec python 2.7.5. (choix justifi� par l'utilisation de certaines lib non port� sur Python3).

    J'ai dans un script une fonction qui me calcule la taile d'un r�pertoire.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
        def _get_size(self):
            """Renvoi la taille du dossier."""
            size = 0
            for rep, sous, files in os.walk(self.path):
                for file in files:
                    size += os.path.getsize(os.sep.join((rep, file)))
            return size
    Or arriv�e � ce fichier

    c:\Users\Frederic\AppData\Local\Packages\WinStore_cw5n1h2txyewy\AC\Microsoft\Windows Store\Cache\0\0-Namespace-https∺∯∯services.apps.microsoft.com∯browse∯6.2.9200-1∯615∯fr-FR∯c∯FR∯Namespace∯pc∯00000000-0000-0000-0000-000000000000∯00000000-0000-0000-0000-000000000000.dat
    Le script me g�n�re une erreur

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
      File "c:\Program Files (x86)\Python27\lib\genericpath.py", line 49, in getsize
     
        return os.stat(filename).st_size
    WindowsError: [Error 3] Le chemin dÆaccÞs spÚcifiÚ est introuvable: u'c:\\Users\\Frederic\\AppData\\Local\\Packages\\WinStore_cw5n1h2txyewy\\AC\\Microsoft\\Windows Store\\Cache\\0\\0-Namespacehttps\u223a\u222f\u222fservices.apps.microsoft.
    com\u222fbrowse\u222f6.2.9200-1\u222f615\u222ffrFR\u222fc\u222fFR\u222fNamespace\u222fpc\u222f00000000-0000-0000-0000-000000000000\u222f00000000-0000-0000-0000-000000000000.dat'
    Donc d'apr�s ce que je comprend le nombre de caract�re �tant sup�rieur � 255, le fichier n'est pas "trouv�".

    Quelqu'un aurait il eu ce type de probl�me et a t il r�ussi � le r�soudre ?

    Merci de vos r�ponses.

  2. #2
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 772
    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 772
    Par d�faut
    Salut,
    C'est un probl�me windows qui se traite avec des "trucs" windows.
    Voir plus particuli�rement lorsqu'ils parlent de "\\?\" prefix
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Technicien r�seaux et t�l�coms
    Inscrit en
    Mai 2012
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Technicien r�seaux et t�l�coms
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 70
    Par d�faut
    Super W,

    Merci

    Je l'ai traiter ainsi.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        def _get_size(self):
            """Renvoi la taille du dossier."""
            if os.name == "nt":
                # prefix utilisé sur windows pour la prise en charge 
                # des longs noms de fichiers.
                prefix_env = "\\\?\\"
            else:
                prefix_env = ""
            size = 0
            for rep, sous, files in os.walk(self.path):
                for file in files:
                    size += os.path.getsize(prefix_env + os.sep.join((rep, file)))
            return size
    Il y a peut �tre une mani�re plus �l�gante de le g�rer.

  4. #4
    Expert confirm�

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par d�faut
    Salut,

    os.path.join() n'aurait pas fait l'affaire � la place de os.sep.join(), la premi�re m�thode prie Python de bien faire les choses selon l'os sous lequel il tourne, la deuxi�me est une m�thode de string, ce qui n'est pas pareil.

  5. #5
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 772
    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 772
    Par d�faut
    Salut,

    Citation Envoy� par VinsS Voir le message
    os.path.join() n'aurait pas fait l'affaire � la place de os.sep.join(), la premi�re m�thode prie Python de bien faire les choses selon l'os sous lequel il tourne, la deuxi�me est une m�thode de string, ce qui n'est pas pareil.
    os.path.join transforme une liste d��l�ments d'un chemin dans la syntaxe locale. Un gros int�r�t cote portabilit� est lorsqu'on a un r�pertoire "racine", genre '~/myapp' qui sera une "constante" exprim�e avec des s�parateurs UNIX-like a composer avec un truc local 'foo\bar.txt'.
    Ici on ajoute "rep" a "file" qui sont des trucs "locaux" retournes par os.walk: os.sep.join "suffit" et sera plus efficace.

    Une optimisation pourrait �tre l'ajout du "prefix" dans le path passe a os.walk, comme il "remonte" dans "rep", le cas "nt" pourrait se simplifier. Apres, on peut ajouter du Pythonique:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       def _get_size(self):
            """Renvoi la taille du dossier."""
            if os.name == "nt":
                path = "\\\\?\\" + os.path.abspath(self.path)
            getsize=os.path.getsize
            join=os.sep.join
            size = 0
            for rep, sous, files in os.walk(path):
                size += sum(getsize(join([rep, f])) for f in files)
            return size
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Noms de fichiers trop long
    Par Maxmoon13 dans le forum C#
    R�ponses: 0
    Dernier message: 15/04/2014, 12h09
  2. Probl�me de compilation et nom fichier trop long
    Par m.joseph dans le forum VB.NET
    R�ponses: 2
    Dernier message: 04/01/2010, 15h55
  3. unix to AS400 : nom de fichiers trop long
    Par funfox dans le forum AS/400
    R�ponses: 4
    Dernier message: 05/03/2009, 09h35
  4. Nom de fichier trop long (nombreux fichiers)
    Par gretch dans le forum Windows XP
    R�ponses: 10
    Dernier message: 14/03/2008, 17h09
  5. getOutputStream() : nom de fichier trop long
    Par joseph_p dans le forum Entr�e/Sortie
    R�ponses: 2
    Dernier message: 29/06/2006, 11h55

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