11
votes

Python Long Nom du nom de fichier brisé dans Windows

J'écris le script Python pour copier des fichiers; Malheureusement, il ne cesse pas d'échouer car le nom de fichier est trop long (> 256). Y a-t-il de toute façon pour traiter ce problème?

J'utilise Python 2.5.4 et Windows XP.

acclamations,


0 commentaires

6 Réponses :


12
votes

1 commentaires

À piggyback sur la réponse, n'ajoutez pas simplement "\\? \" À votre chemin, ajoutez "\\\\\? \\" à votre chemin, afin d'échapper aux barres antibruit nécessaires




9
votes

Pour utiliser le préfixe \\ \\? \\ \\? \\ \\? \\ préfixe (comme déjà proposé), vous devez également vous assurer d'utiliser des chaînes UNICODE comme noms de fichiers, non réguliers (octets).


2 commentaires

Oh, je ne le savais pas. Merci!


De plus, j'ai trouvé que (1) seuls les noms de chemin absolus travaillés, et (2) seulement les gastrastresses fonctionnaient.



3
votes

pour quelqu'un d'autre à la recherche de solution ici:

  1. Vous devez ajouter le préfixe \\? \ comme déjà indiqué et assurez-vous que la chaîne est unicode;
  2. Si vous utilisez Shuttil, surtout quelque chose comme ShutL.RMTree avec une méthode ONERRRE, vous devez modifier aussi pour ajouter du préfixe car il est dépouillé quelque part sur le chemin.

    Vous devrez écrire quelque chose comme: xxx

    Ceci est un exemple pour Python 3.x afin que toutes les chaînes soient unicode.


0 commentaires

0
votes

Cette réponse par udev suggère d'ajouter xxx

Il semble fonctionner pour travailler pour moi.


0 commentaires

0
votes

Une autre chose qui fonctionne pour moi est de modifier le répertoire en place auquel je veux copier:

import os
import shutil

def copyfile_long_path(src, dst):
    
    src_abs = os.path.abspath(src)
    dst_abs = os.path.abspath(dst)
    
    cwd = os.getcwd()
    os.chdir(os.path.dirname(dst))
    shutil.copyfile(src_abs, os.path.filename(dst))
    os.chdir(cwd)
    
    if not os.path.isfile(dst_abs):    
        raise Exception("copying file failed")


0 commentaires