Je dois compter le nombre de fichiers d'un répertoire à l'aide de Python . Je suppose que le moyen le plus simple est len(glob.glob('*'))
, mais cela compte également le répertoire comme un fichier.
Est-il possible de ne compter que les fichiers d'un répertoire?
os.listdir()
sera légèrement plus efficace que d'utiliser glob.glob
. Pour vérifier si un nom de fichier est un fichier ordinaire (et non un répertoire ou une autre entité), utilisez os.path.isfile()
:
import os, os.path
# simple version for working with CWD
print len([name for name in os.listdir('.') if os.path.isfile(name)])
# path joining version for other paths
DIR = '/tmp'
print len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR, name))])
import os
path, dirs, files = next(os.walk("/usr/lib"))
file_count = len(files)
Pour tous les types de fichiers, les sous-répertoires inclus:
import os
list = os.listdir(dir) # dir is your directory path
number_files = len(list)
print number_files
Seulement les fichiers (en évitant les sous-répertoires):
import os
onlyfiles = next(os.walk(dir))[2] #dir is your directory path as string
print len(onlyfiles)
C’est là que fnmatch est très pratique:
import fnmatch
print len(fnmatch.filter(os.listdir(dirpath), '*.txt'))
Plus de détails: http://docs.python.org/2/library/fnmatch.html
def directory(path,extension):
list_dir = []
list_dir = os.listdir(path)
count = 0
for file in list_dir:
if file.endswith(extension): # eg: '.txt'
count += 1
return count
import os
print len(os.listdir(os.getcwd()))
Ceci utilise os.listdir
et fonctionne pour n’importe quel répertoire:
import os
directory = 'mydirpath'
number_of_files = len([item for item in os.listdir(directory) if os.path.isfile(os.path.join(directory, item))])
ceci peut être simplifié avec un générateur et rendu un peu plus rapide avec:
import os
isfile = os.path.isfile
join = os.path.join
directory = 'mydirpath'
number_of_files = sum(1 for item in os.listdir(directory) if isfile(join(directory, item)))
Je suis surpris que personne n'ait mentionné os.scandir
:
def count_files(dir):
return len([1 for x in list(os.scandir(dir)) if x.is_file()])
Si vous souhaitez compter tous les fichiers du répertoire, y compris les fichiers des sous-répertoires, utilisez la méthode Pythonic la plus courante:
import os
file_count = sum(len(files) for _, _, files in os.walk(r'C:\Dropbox'))
print(file_count)
Nous utilisons une somme plus rapide que l'ajout explicite du nombre de fichiers (délais en attente)
def count_em(valid_path):
x = 0
for root, dirs, files in os.walk(valid_path):
for f in files:
x = x+1
print "There are", x, "files in this directory."
return x
Tiré de ce post
import os
def count_files(in_directory):
joiner= (in_directory + os.path.sep).__add__
return sum(
os.path.isfile(filename)
for filename
in map(joiner, os.listdir(in_directory))
)
>>> count_files("/usr/lib")
1797
>>> len(os.listdir("/usr/lib"))
2049
Voici une simple commande d'une ligne que j'ai trouvée utile:
print int(os.popen("ls | wc -l").read())
Le code de Luke est reformaté.
import os
print len(os.walk('/usr/lib').next()[2])
Si vous utilisez le shell standard du système d'exploitation, vous pouvez obtenir le résultat beaucoup plus rapidement que d'utiliser la méthode Pythonic pure.
Exemple pour Windows:
import os
import subprocess
def get_num_files(path):
cmd = 'DIR \"%s\" /A-D /B /S | FIND /C /V ""' % path
return int(subprocess.check_output(cmd, Shell=True))
import os
total_con=os.listdir('<directory path>')
files=[]
for f_n in total_con:
if os.path.isfile(f_n):
files.append(f_n)
print len(files)
J'ai trouvé une autre réponse qui peut être correcte comme réponse acceptée.
for root, dirs, files in os.walk(input_path):
for name in files:
if os.path.splitext(name)[1] == '.TXT' or os.path.splitext(name)[1] == '.txt':
datafiles.append(os.path.join(root,name))
print len(files)
C'est simple:
print(len([iq for iq in os.scandir('PATH')]))
il compte simplement le nombre de fichiers dans le répertoire, j’ai utilisé la technique de compréhension de liste pour parcourir un répertoire spécifique renvoyant tous les fichiers en retour. "len (liste retournée)" renvoie le nombre de fichiers.
je l'ai fait et cela a renvoyé le nombre de fichiers dans le dossier (Attack_Data) ... cela fonctionne bien.
import os
def fcount(path):
#Counts the number of files in a directory
count = 0
for f in os.listdir(path):
if os.path.isfile(os.path.join(path, f)):
count += 1
return count
path = r"C:\Users\EE EKORO\Desktop\Attack_Data" #Read files in folder
print (fcount(path))
Bien que je sois d’accord avec la réponse fournie par @DanielStutzbach: os.listdir()
sera légèrement plus efficace que d’utiliser glob.glob
.
Toutefois, précision supplémentaire, si vous souhaitez compter le nombre de fichiers spécifiques dans un dossier, vous souhaitez utiliser len(glob.glob())
. Par exemple, si vous comptiez tous les fichiers PDF dans un dossier que vous souhaitez utiliser:
pdfCounter = len(glob.glob1(myPath,"*.pdf"))