Как посчитать количество файлов в каталоге, используя Python - PullRequest
166 голосов
/ 13 апреля 2010

Мне нужно посчитать количество файлов в каталоге, используя Python.

Полагаю, самый простой способ - len(glob.glob('*')), но он также считает сам каталог как файл.

Можно ли считать в каталоге только файлы ?

Ответы [ 20 ]

4 голосов
/ 13 апреля 2010
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

Взято из этого поста

3 голосов
/ 09 мая 2016

Вот простая однострочная команда, которая мне показалась полезной:

print int(os.popen("ls | wc -l").read())
3 голосов
/ 30 мая 2012

переформатирование кода Люка.

import os

print len(os.walk('/usr/lib').next()[2])
1 голос
/ 19 апреля 2015

Я нашел другой ответ, который может быть правильным как принятый ответ.

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 голос
/ 29 сентября 2014
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 голос
/ 08 апреля 2015

Если вы будете использовать стандартную оболочку операционной системы, вы можете получить результат гораздо быстрее, чем с использованием чисто питонического способа.

Пример для 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))
0 голосов
/ 18 октября 2018

Хотя я согласен с ответом @DanielStutzbach: os.listdir() будет несколько более эффективным, чем использование glob.glob.

Однако, для дополнительной точности, если вы хотите посчитать количество определенных файлов в папке, вы хотите использовать len(glob.glob()). Например, если вам нужно сосчитать все PDF-файлы в папке, которую вы хотите использовать:

pdfCounter = len(glob.glob1(myPath,"*.pdf"))
0 голосов
/ 24 ноября 2016

Я использовал glob.iglob для структуры каталогов, аналогичной

data
└───train
│   └───subfolder1
│   |   │   file111.png
│   |   │   file112.png
│   |   │   ...
│   |
│   └───subfolder2
│       │   file121.png
│       │   file122.png
│       │   ...
└───test
    │   file221.png
    │   file222.png

Обе из следующих опций возвращают 4 (как и ожидалось, , т.е. не считает сами подпапки )

  • len(list(glob.iglob("data/train/*/*.png", recursive=True)))
  • sum(1 for i in glob.iglob("data/train/*/*.png"))
0 голосов
/ 29 июля 2018

Это просто:

print(len([iq for iq in os.scandir('PATH')]))

он просто подсчитывает количество файлов в каталоге, я использовал технику понимания списка, чтобы перебрать конкретный каталог, возвращая все файлы взамен. «len (возвращенный список)» возвращает количество файлов.

0 голосов
/ 11 января 2017

Я сделал это, и это вернуло количество файлов в папке (Attack_Data) ... это работает отлично.

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...