Ich muss die Anzahl der Dateien in einem Verzeichnis zählen, das Python verwendet Ich denke, der einfachste Weg ist len(glob.glob('*'))
, aber das Verzeichnis zählt auch als Datei.
Gibt es eine Möglichkeit, nur die Dateien in einem Verzeichnis zu zählen?
os.listdir()
ist etwas effizienter als glob.glob
. Um zu testen, ob ein Dateiname eine gewöhnliche Datei ist (und nicht ein Verzeichnis oder eine andere Entität), verwenden Sie 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)
Für alle Arten von Dateien sind folgende Unterverzeichnisse enthalten:
import os
list = os.listdir(dir) # dir is your directory path
number_files = len(list)
print number_files
Nur Dateien (Vermeidung von Unterverzeichnissen):
import os
onlyfiles = next(os.walk(dir))[2] #dir is your directory path as string
print len(onlyfiles)
Hier ist fnmatch sehr praktisch:
import fnmatch
print len(fnmatch.filter(os.listdir(dirpath), '*.txt'))
Weitere Details: 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()))
Dies verwendet os.listdir
und funktioniert für jedes Verzeichnis:
import os
directory = 'mydirpath'
number_of_files = len([item for item in os.listdir(directory) if os.path.isfile(os.path.join(directory, item))])
dies kann mit einem Generator vereinfacht und mit:
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)))
Ich bin überrascht, dass niemand os.scandir
erwähnt hat:
def count_files(dir):
return len([1 for x in list(os.scandir(dir)) if x.is_file()])
Wenn Sie alle Dateien im Verzeichnis zählen möchten, einschließlich der Dateien in Unterverzeichnissen, ist die Pythonic-Methode am besten
import os
file_count = sum(len(files) for _, _, files in os.walk(r'C:\Dropbox'))
print(file_count)
Wir verwenden eine Summe, die schneller ist als das explizite Hinzufügen der Dateizählung (anstehende Timings).
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
Taked from dieser Beitrag
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
Hier ist ein einfacher einzeiliger Befehl, den ich nützlich fand:
print int(os.popen("ls | wc -l").read())
Lukas Code umformatiert.
import os
print len(os.walk('/usr/lib').next()[2])
Wenn Sie die Standard-Shell des Betriebssystems verwenden, können Sie das Ergebnis viel schneller erzielen, als auf reine Pythonic-Methode.
Beispiel für 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)
Ich habe eine andere Antwort gefunden, die möglicherweise als akzeptierte Antwort richtig ist.
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)
Es ist einfach:
print(len([iq for iq in os.scandir('PATH')]))
es zählt einfach die Anzahl der Dateien im Verzeichnis. Ich habe die Listenverständnismethode verwendet, um ein bestimmtes Verzeichnis zu durchlaufen und alle Dateien zurückzugeben. "len (zurückgegebene Liste)" gibt die Anzahl der Dateien zurück.
Ich habe _glob.iglob
_ für eine Verzeichnisstruktur ähnlich wie verwendet
_data
└───train
│ └───subfolder1
│ | │ file111.png
│ | │ file112.png
│ | │ ...
│ |
│ └───subfolder2
│ │ file121.png
│ │ file122.png
│ │ ...
└───test
│ file221.png
│ file222.png
_
Beide der folgenden Optionen geben 4 zurück (wie erwartet d. H. Zählt die Unterordner selbst nicht)
len(list(glob.iglob("data/train/*/*.png", recursive=True)))
sum(1 for i in glob.iglob("data/train/*/*.png"))
ich tat dies und gab die Anzahl der Dateien im Ordner (Attack_Data) zurück ...
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))
Obwohl ich mit der Antwort von @DanielStutzbach einverstanden bin: os.listdir()
ist etwas effizienter als glob.glob
.
Wenn Sie jedoch die Anzahl bestimmter Dateien in einem Ordner zählen möchten, verwenden Sie len(glob.glob())
. Wenn Sie beispielsweise alle PDF-Dateien in einem Ordner zählen möchten, den Sie verwenden möchten:
pdfCounter = len(glob.glob1(myPath,"*.pdf"))