Erreur lors de l'utilisation listdir en Python
Je vais essayer d'obtenir la liste des fichiers dans un répertoire particulier et de compter le nombre de fichiers dans le répertoire. Je reçois toujours le message d'erreur suivant:
WindowsError: [Error 3] The system cannot find the path specified: '/client_side/*.*'
Mon code est:
print len([name for name in os.listdir('/client_side/') if os.path.isfile(name)])
J'ai suivi l'exemple de code donné ici.
Je suis en cours d'exécution du script Python sur Pyscripter et le répertoire /client_side/n'existe. Mon code python est dans le dossier racine et a un sous-dossier appelé "client_side". Quelqu'un peut-il m'aider sur ce point?
Je me demandais si cela a quelque chose à voir avec le " / " dans windows ! Idéalement, sur windows, vous devriez avoir quelque chose comme
os.path.join('C:','client_side')
OriginalL'auteur Sakura | 2013-03-16
Vous devez vous connecter pour publier un commentaire.
Cette erreur se produit lorsque vous utilisez
os.listdir
sur un chemin qui ne fait pas référence à un chemin existant.Par exemple:
Si vous souhaitez utiliser
os.listdir
, vous avez besoin de la garantie de l'existence du chemin d'accès que vous utilisez, ou de l'utilisationos.path.exists
de vérifier l'existence de la première.Supposons que votre répertoire de travail actuel est
c:\foobar
,os.listdir('/client_side/')
est équivalent àos.listdir('c:/client_side')
, tandis queos.listdir('client_side/')
est équivalent àos.listdir('c:/foobar/client_side')
. Si votre client_side répertoire n'est pas à la racine, une telle erreur se produit lors de l'utilisation deos.listdir
.Pour votre 0 sortie problème, rappelons-le
os.listdir(chemin)
et
os.chemin d'accès.isfile(chemin)
.listdir
renvoie ni les chemins d'accès absolus, ni les chemins relatifs, mais une liste du nom de vos fichiers, tandis queisfile
nécessite chemin. Par conséquent, tous ces noms de rendementFalse
.Pour obtenir le chemin d'accès, on peut soit utiliser
os.chemin d'accès.join
, la concaténation de deux chaînes de caractères directement.Ou
parce que
os.listdir
retourne les noms. Vous ne devez pas utiliseros.path.isfile
sur ces noms. J'ai mis à jour mon post et a donné une explication complète.Vous devriez vraiment changer la accepté de répondre à
OriginalL'auteur nymk
J'ai décidé de changer le code dans:
et utiliser la suite de l'appel le code:
Un grand merci à tous ceux qui m'ont dit comment passer le répertoire windows correctement en Python et à nrao91 dans ici de fournir le code de la fonction.
EDIT: Merci eryksun pour la correction de mon code!
Vous êtes les bienvenus. nymk réponse est excellent, et je pense que vous devriez l'accepter comme la réponse à votre question.
OriginalL'auteur Sakura
Deux choses:
sans le . dans le nom
La syntaxe que vous avez utilisé fonctionne très bien, si le répertoire que vous recherchez existe, mais il n'y a pas de répertoire appelé '/client_side/.'.
En outre, être prudent si l'utilisation de Python 2.x et os.listdir, que les résultats sur windows sont différents lorsque vous utilisez u'/client_side/' et '/client_side'.
posix.listdir
. Dans Win32, il utiliseFindFirstFileW
(ou la version ANSI pour les octets). Il ne permet pas une barre oblique. Ainsi, au lieu de revêtement spécial, de la racine des répertoires tels queC:\
, Python juste ajoute*.*
.OriginalL'auteur schlenk
Vous pouvez juste faire
sans barres obliques.
OriginalL'auteur user2174865
Que je peux voir un
WindowsError
, je me demandais si cela a quelque chose à voir avec le " /" dans windows ! Idéalement, sur windows, vous devriez avoir quelque chose commeos.path.join('C:','client_side')
OriginalL'auteur GodMan
Vous voulez:
avec un "." avant "/client_side/".
Le point désigne le chemin d'accès actuel où vous travaillez (c'est à dire à partir d'où vous appelez votre code), -". /client_side/" représente le chemin d'accès que vous souhaitez, ce qui est spécifié relativement à votre répertoire courant.
Si vous écrivez que "/client_side/", sous unix, le programme serait chercher un dossier à la racine du système, au lieu de le dossier que vous souhaitez.
OriginalL'auteur sissi_luaty
Si vous voulez juste pour voir tous les fichiers dans le répertoire où se trouve votre script, vous pouvez utiliser
os.path.dirname(sys.argv[0])
. Cela permettra de donner le chemin du répertoire où se trouve votre script.Puis, avec
fnmatch
fonction, vous pouvez obtenir la liste des fichiers dans ce répertoire avec un nom et/ou de l'extension spécifiée dans lefilename
variable.J'espère que cette aide.
OriginalL'auteur Joe