À compter les fichiers et répertoires non-récursive vous pouvez utiliser os.listdir et de prendre toute sa longueur.
À compter les fichiers et répertoires de manière récursive vous pouvez utiliser os.marche pour parcourir les fichiers et sous-répertoires dans le répertoire.
Si vous ne voulez pas compter les fichiers répertoires, vous pouvez utiliser os.listdir et os.chemin d'accès.fichier pour vérifier si chaque entrée est un fichier:
import os.path
path ='.'
num_files = len([f for f in os.listdir(path)if os.path.isfile(os.path.join(path, f))])
Ou, alternativement, à l'aide d'un générateur:
num_files = sum(os.path.isfile(os.path.join(path, f))for f in os.listdir(path))
Ou, comme Marque Byers suggère, dans sa réponse, si vous ne souhaitez que des fichiers:
>>>print[f for f in glob.glob('/tmp/*')if os.path.isfile(f)]['/tmp/foo']>>>print sum(os.path.isfile(f)for f in glob.glob('/tmp/*'))1
Il faut dire, que os.listdir('.') inclut les fichiers cachés (commençant par un point), tandis que glob('./*') ne le fait pas. Si vous voulez les fichiers cachés dans le répertoire courant, utilisez glob('.*'). Si vous voulez tout, y compris les fichiers cachés, utilisez glob('.*') + glob('*').
Marque Byer la réponse est simple, élégant, et va de pair avec le python esprit.
Il y a un problème, cependant: si vous essayez d'exécuter que pour n'importe quel autre dossier que ".", ce sera un échec, puisque l'os.listdir() retourne le nom des fichiers, pas le chemin d'accès complet. Ces deux sont les mêmes lors de l'inscription au répertoire de travail courant, donc l'erreur passe inaperçue dans la source ci-dessus.
Par exemple, si votre "/home/moi" et vous liste "/tmp", vous obtiendrez (dire) ['flashXVA67']. Vous serez en test "/home/moi/flashXVA67" au lieu de "/tmp/flashXVA67" avec la méthode ci-dessus.
Vous pouvez résoudre ce problème à l'aide de mac os.chemin d'accès.join(), comme ceci:
import os.path
path ='./whatever'
count = len([f for f in os.listdir(path)if os.path.isfile(os.path.join(path, f))])
Aussi, si vous allez faire ce comptent beaucoup et en exiger l'exécution, vous pouvez le faire sans générer des listes supplémentaires. Voici un moins élégant, unpythonesque encore de solution efficace:
import os
def fcount(path):""" Counts the number of files in a directory """
count =0for f in os.listdir(path):if os.path.isfile(os.path.join(path, f)):
count +=1return count
# The following line prints the number of files in the current directory:
path ="./whatever"print fcount(path)
jetez un oeil à bstpierre de réponse. En effet! C'est mieux que le mien, et si vous lisez ceci, revenez sur la première réponse, un complément a été apporté par la Marque à l'aide de marcher() qui traite à la fois des problèmes que j'ai souligné en une seule ligne. +1 pour repérer le bug j'ai mis à jour ma réponse avec votre version corrigée.
pathlib, qui est nouveau dans la v. 3.4, rend la vie plus facile. La ligne intitulée 1 non-récursif de la liste du dossier en cours, l'un étiqueté 2 la liste récursive.
from pathlib importPathimport os
os.chdir('c:/utilities')print(len(list(Path('.').glob('*'))))## 1print(len(list(Path('.').glob('**/*'))))## 2
Il y a plus de goodies. Avec ces lignes supplémentaires, vous pouvez voir à la fois absolue et relative des noms de fichier pour les articles qui sont fichiers.
for item inPath('.').glob('*'):if item.is_file():print(str(item), str(item.absolute()))
À compter les fichiers et répertoires non-récursive vous pouvez utiliser
os.listdir
et de prendre toute sa longueur.À compter les fichiers et répertoires de manière récursive vous pouvez utiliser
os.marche
pour parcourir les fichiers et sous-répertoires dans le répertoire.Si vous ne voulez pas compter les fichiers répertoires, vous pouvez utiliser
os.listdir
etos.chemin d'accès.fichier
pour vérifier si chaque entrée est un fichier:Ou, alternativement, à l'aide d'un générateur:
Ou vous pouvez utiliser
os.walk
comme suit:J'ai trouvé certaines de ces idées de ce fil.
OriginalL'auteur Mark Byers
Vous pouvez utiliser le glob module:
Ou, comme Marque Byers suggère, dans sa réponse, si vous ne souhaitez que des fichiers:
os.listdir('.')
inclut les fichiers cachés (commençant par un point), tandis queglob('./*')
ne le fait pas.Si vous voulez les fichiers cachés dans le répertoire courant, utilisez
glob('.*')
. Si vous voulez tout, y compris les fichiers cachés, utilisezglob('.*') + glob('*')
.OriginalL'auteur bstpierre
Marque Byer la réponse est simple, élégant, et va de pair avec le python esprit.
Il y a un problème, cependant: si vous essayez d'exécuter que pour n'importe quel autre dossier que ".", ce sera un échec, puisque l'os.listdir() retourne le nom des fichiers, pas le chemin d'accès complet. Ces deux sont les mêmes lors de l'inscription au répertoire de travail courant, donc l'erreur passe inaperçue dans la source ci-dessus.
Par exemple, si votre "/home/moi" et vous liste "/tmp", vous obtiendrez (dire) ['flashXVA67']. Vous serez en test "/home/moi/flashXVA67" au lieu de "/tmp/flashXVA67" avec la méthode ci-dessus.
Vous pouvez résoudre ce problème à l'aide de mac os.chemin d'accès.join(), comme ceci:
Aussi, si vous allez faire ce comptent beaucoup et en exiger l'exécution, vous pouvez le faire sans générer des listes supplémentaires. Voici un moins élégant, unpythonesque encore de solution efficace:
En effet! C'est mieux que le mien, et si vous lisez ceci, revenez sur la première réponse, un complément a été apporté par la Marque à l'aide de marcher() qui traite à la fois des problèmes que j'ai souligné en une seule ligne.
+1 pour repérer le bug j'ai mis à jour ma réponse avec votre version corrigée.
OriginalL'auteur slezica
pathlib
, qui est nouveau dans la v. 3.4, rend la vie plus facile. La ligne intitulée 1 non-récursif de la liste du dossier en cours, l'un étiqueté 2 la liste récursive.Il y a plus de goodies. Avec ces lignes supplémentaires, vous pouvez voir à la fois absolue et relative des noms de fichier pour les articles qui sont fichiers.
Résultat:
OriginalL'auteur Bill Bell
OU
OriginalL'auteur Leonid Dashko
solution récursive:
pour le répertoire courant de la solution:
OriginalL'auteur Iulian Bute