Python os.makedirs de recréer chemin
Je veux aller à travers chaque ligne d'un fichier texte existant chemins et noms de fichiers, de diviser les cordes dans le lecteur, le chemin d'accès et nom de fichier. Alors ce que je voudrais faire est de copier les fichiers avec leurs chemins d'accès à un nouvel emplacement, soit d'une autre unité ou ajouter à un fichier existant de l'arbre (c'est à dire, si S:\A\B\C\D\E\F.shp est le fichier d'origine. Je tiens à ajouter à la nouvelle position en tant que C:\users\visc\A\B\C\D\E\F.shp
En raison de mes faibles compétences en programmation, je continue à recevoir le message d'erreur:
File "C:\Users\visc\a\b.py", line 28, in <module>
(destination) = os.makedirs( pathname, 0755 );
Voici mon code:
import os,sys, shutil
## Open the file with read only permit
f = open('C:/Users/visc/a/b/c.txt')
destination = ('C:/Users/visc')
# read line by line
for line in f:
line = line.replace("\\\\", "\\")
#split the drive and path using os.path.splitdrive
(drive, pathname) = os.path.splitdrive(line)
#split the path and fliename using os.path.split
(pathname, filename) = os.path.split(pathname)
#print the stripped line
print line.strip()
#print the drive, path, and filename info
print('Drive is %s Path is %s and file is %s' % (drive, pathname, filename))
(destination) = os.makedirs( pathname, 0755 );
print "Path is Created"
Merci
- Vous n'inclut pas le message d'erreur.
- Partielle de sperme? C'est encore pire que l'affichage non à tous.
- Désolé, voici mon message d'erreur complet:
Traceback (most recent call last): File "C:\Users\visc\a\b.py", line 28, in <module> (destination) = os.makedirs( pathname, 0755 ); File "C:\Python26\ArcGIS10.0\lib\os.py", line 157, in makedirs mkdir(name, mode) WindowsError: [Error 183] Cannot create a file when that file already exists: '\\A\\B\\C\\D\\E'
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous voulez quelque chose comme
si vous souhaitez vous connecter les chemins de fichier donné par
pathname
à la nouvelle destination donnée pardestination
. Votre code actuellement essaie de créer un fichier dans le même endroit qu'avant (au moins il ressemble à ce qui ne peut pas le dire car je ne sais pas ce qui est dans le fichier que vous êtes en train de lire et qu'est-ce que votre répertoire courant).Si vous attribuer le résultat de l'appel à
os.makedirs()
àdestination
(les parenthèses sont inutiles comme le point-virgule à la ligne), vous définissezdestination
àNone
depuisos.makedirs()
ne retourne rien. Et vous ne l'utilisez pas pour construire votre nouveau chemin.Ce que vous devez faire est soit de vérifier l'existence du dossier avant d'appeler
makedirs()
ou de traiter l'exception se produit si le dossier existe déjà. En Python, c'est un peu plus conventionnel pour gérer l'exception, donc, de changer votremakedirs()
ligne:La stratégie de vérification pour le dossier avant d'essayer de créer il est connu comme "Regarder Avant de Sauter" ou LBYL; la stratégie de la manipulation des erreurs attendues, qui est "plus Facile de Demander Pardon que la Permission" ou l'aeap. L'avantage de l'aeap, c'est qu'il gère correctement le cas où le dossier est créé par un autre processus entre le contrôle et la
makedirs()
appel.except OSError, e: if e.errno != errno.EEXIST: raise
Python 3.2 ajout d'une exist_ok paramètre facultatif:
os.makedirs(nom, mode=0o777, exist_ok=False)
Si vous avez le luxe de pouvoir l'utiliser Python 3, ce pourrait être mieux (et plus sûr) de l'option.