web-dev-qa-db-fra.com

Fractionnement des chaînes de chemin d'accès en parties de lecteur, de chemin d'accès et de nom de fichier

Je suis nouveau sur python et le codage en général. J'essaie de lire à partir d'un fichier texte qui a des noms de chemin sur chaque ligne. Je voudrais lire le fichier texte ligne par ligne et diviser le chaînes de lignes en lecteur, chemin et nom de fichier.

Voici mon code jusqu'à présent:

import os,sys, arcpy

## Open the file with read only permit
f = open('C:/Users/visc/scratch/scratch_child/test.txt')

for line in f:
    (drive,path,file) = os.path.split(line)

    print line.strip()
    #arcpy.AddMessage (line.strip())
    print('Drive is %s Path is %s and file is %s' % (drive, path, file))

J'obtiens l'erreur suivante:

File "C:/Users/visc/scratch/simple.py", line 14, in <module>
    (drive,path,file) = os.path.split(line)
ValueError: need more than 2 values to unpack

Je ne reçois pas cette erreur lorsque je souhaite uniquement le chemin et le nom de fichier.

18
Visceral

Vous devez utiliser os.path.splitdrive première:

with open('C:/Users/visc/scratch/scratch_child/test.txt') as f:
    for line in f:
        drive, path = os.path.splitdrive(line)
        path, filename = os.path.split(path)
        print('Drive is %s Path is %s and file is %s' % (drive, path, filename))

Remarques:

  • l'instruction with s'assure que le fichier est fermé à la fin du bloc (les fichiers sont également fermés lorsque le garbage collector les mange, mais l'utilisation de with est généralement une bonne pratique
  • vous n'avez pas besoin des crochets - os.path.splitdrive (path) renvoie un Tuple, et cela sera automatiquement décompressé
  • file est le nom d'une classe dans l'espace de noms standard et vous ne devriez probablement pas l'écraser :)
31
Manuel Ebert

Vous pouvez utiliser os.path.splitdrive () pour obtenir le lecteur, puis path.split () le reste.

## Open the file with read only permit
f = open('C:/Users/visc/scratch/scratch_child/test.txt')

for line in f:
    (drive, path) = os.path.splitdrive(line)
    (path, file)  = os.path.split(path)

    print line.strip()
    print('Drive is %s Path is %s and file is %s' % (drive, path, file))
6
jordanm