wake-up-neo.com

Wie wird die Anzahl der Dateien in einem Verzeichnis mit Python gezählt?

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?

141
prosseek

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))])
192
import os

path, dirs, files = next(os.walk("/usr/lib"))
file_count = len(files)
68
Luke

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)
31

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

27
ngeek
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
11
ninjrok
import os
print len(os.listdir(os.getcwd()))
9
rash

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)))
7
joaquin

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()])
5
qed

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).

5
Mr_and_Mrs_D
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

4
Kristian Damian
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
4
tzot

Hier ist ein einfacher einzeiliger Befehl, den ich nützlich fand:

print int(os.popen("ls | wc -l").read())
3
Bojan Tunguz

Lukas Code umformatiert.

import os

print len(os.walk('/usr/lib').next()[2])
3
okobaka

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))
1
styler
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)
1
Mohit Dabas

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) 
1
Ismail

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.

0
Agha Saad

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"))
0
user799188

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))
0
Sam Ekoro

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"))
0
LBes