2017-08-09 5 views
1

Je réalise que cela ressemblera à une question en double mais j'ai vérifié toutes les questions que j'ai pu trouver qui me paraissent pertinentes et aucune ne résout mon problème.Obtenir WinError 3 ou UnicodeDecodeError depuis os.listdir (chemin)

je produis ma myPath variable de la façon la plus pythonique Je sais comment l'utilisation os.path.join
J'ai aussi essayé d'utiliser des chaînes avec r'path_string' et même en utilisant des barres obliques au lieu cependant à la fois aussi me donner FileNotFoundError: [WinError 3] The system cannot find the path specified

J'ai aussi essayé d'utiliser b'path_string' mais cela m'a donné une autre erreur, de sorte que ce soit n'a pas été utile: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 69: invalid start byte

Toutes ces erreurs sont générées par la même ligne dans mon code:
Avant de demander, j'ai triplé le chemin du répertoire du lecteur partagé et il existe et il y a accès.
Il semblerait également que le problème provient de l'exécution de ce programme à partir de l'invite de commande en tant qu'administrateur, ce qui en fait une question plus académique.

code complet est ci-dessous,

import os 

#myPath = 'z:/Data/App_Projects/Client_Data/Client/Date' 
#myPath = b'z:/Data/App_Projects/Client_Data/Client/Date' 
myPath = os.path.join("z:", os.sep, "Data", "App_Projects", "Client_Data", "Client", "Date") 

files = os.listdir(myPath) 

Répondre

0

Le problème semble provenir du fait que ce soit un lecteur réseau. Bien que l'utilisateur utilisé soit un administrateur lors de l'utilisation d'une invite de commande élevée, le lecteur en réseau n'est plus associé à cette session car il est uniquement mappé pour la session non élevée. Cela a été expliqué dans this réponse par Alberto Martinez sur SuperUser mais je pense que son pertinent ici comme son pas nécessairement une cause évidente de l'erreur.

0

Vous pouvez toujours accéder aux fichiers du lecteur réseau en utilisant python si vous connaissez le chemin réseau.

network_path = r"\\192.168.0.1" # or \\your_network_name 
myPath = os.path.join(network_path, "Data", "App_Projects", "Client_Data", "Client", "Date") 
+0

Vous pouvez toujours accéder aux fichiers de lecteur réseau sans que si vous avez déjà mappé à une lettre de lecteur ainsi, votre solution ne fonctionne que si elle est un lecteur réseau non sécurisé à moins que vous pouvez transmettre les informations d'identification chaque fois que vous accédez? –