Как посчитать количество файлов в папке python

от admin

Как мне прочитать количество файлов в папке, используя Python?

Как узнать количество файлов в определенной папке с помощью Python? Пример кода будет потрясающим!

6 ответов

Чтобы пересчитать файлы и каталоги нерекурсивно, вы можете использовать os.listdir и взять свою длину.

Чтобы подсчитать файлы и каталоги рекурсивно, вы можете использовать os.walk для перебора файлов и подкаталогов в каталоге.

Если вы хотите только сосчитать файлы, которые не являются каталогами, вы можете использовать os.listdir и os.path.file , чтобы проверить, является ли каждая запись файлом:

Или, альтернативно, используя генератор:

Или вы можете использовать os.walk следующим образом:

Я нашел некоторые из этих идей из этот поток.

Вы можете использовать модуль glob:

Или, как предлагает Марк Байерс в своем ответе, если вы хотите только файлы:

Ответ Марка Байера прост, изящный и сочетается с духом питона.

Есть проблема, однако: если вы попытаетесь запустить ее для любой другой директории, чем «.», она не будет работать, поскольку os.listdir() возвращает имена файлов, а не полный путь. Эти два значения совпадают при перечислении текущего рабочего каталога, поэтому ошибка не обнаруживается в исходном файле выше.

Например, если вы в «/home/me» и вы перечислите «/tmp», вы получите (скажем) [‘flashXVA67’]. Вы будете тестировать «/home/me/flashXVA67» вместо «/tmp/flashXVA67» с помощью метода выше.

Вы можете исправить это, используя os.path.join(), например:

Кроме того, если вы собираетесь делать этот счет много и требуют производительности, вы можете сделать это без создания дополнительных списков. Здесь менее элегантное, нерегулярное, но эффективное решение:

Как подсчитать количество файлов в каталоге с помощью Python

Мне нужно подсчитать количество файлов в каталоге с помощью Python.

Я думаю, самый простой способ — это len(glob.glob(‘*’)) , но при этом сам каталог считается файлом.

Есть ли способ посчитать только файлов в каталоге?

Чтобы исключить каталоги, вы можете использовать ‘* .fileextension’ для любого расширения файла, которое вы ищете. — user2891129

26 ответы

os.listdir() будет немного эффективнее, чем использование glob.glob . Чтобы проверить, является ли имя файла обычным файлом (а не каталогом или другим объектом), используйте os.path.isfile() :

Не забудьте добавить folder_path внутри os.path.filename(name) если вы не на cwd. stackoverflow.com/questions/17893542/… — Рафаэль Оливейра

Это не учитывает файл внутри вложенных папок. — кодеры

Для рекурсивного подсчета файлов, вложенных в каталоги, вам может быть лучше использовать решение os.walk (). — Джоэл б

Какая польза от использования os.path.join(DIR, name) за DIR + ‘/’ + name ? Последний короче и, ИМО, более понятен, чем первый. Возможно, есть ОС, на которых последняя не работает? — Привет пока

@HelloGoodbye Именно по этой причине. — эллок

ответ дан 24 апр.

Для всех типов файлов подкаталоги включают:

Только файлы (избегая подкаталогов):

ответ дан 14 дек ’16, 14:12

Вот где вам очень пригодится fnmatch:

ответ дан 31 мая ’13, 21:05

Это намного быстрее (примерно в половине случаев, когда я тестировал каталог с 10,000 файлов), если вы знаете шаблон, который ищете, а не тестируйте каждый файл с помощью os.path.isfile() как и принятый ответ. Также значительно быстрее, чем glob.glob() . — CivFan

Если вы хотите подсчитать все файлы в каталоге, включая файлы в подкаталогах, наиболее питоническим способом является:

Мы используем сумму, которая быстрее, чем явное добавление количества файлов (ожидаемые тайминги)

ответ дан 22 дек ’17, 13:12

Привет, я пытался понять этот код (код работает отлично), я знаю, что мы можем использовать _ в for петля. os.walk тоже знаю. Но не уверен, что происходит с подчеркиванием внутри sum функция, не могли бы вы уточнить. Спасибо! — Эджаз

Читать:
В какое время стоят гаишники чаще всего

Unsderscore — это просто имя переменной @Ejaz, по соглашению используемое, когда мы игнорируем переменную — это то, что мы делаем здесь — мы вызываем walk и только подсчитываем количество файлов в каждом каталоге, игнорируя возвращаемые значения root и dirs walk — Мистер_и_Миссис_Д

Это полностью рекурсивный и, вероятно, лучший ответ здесь. — СомДжура

Это должен быть наиболее подходящий ответ, чтобы также подсчитать файлы во всех подпапках .. — Пастроккио

How to count the number of files in a directory using Python

How do I count only the files in a directory? This counts the directory itself as a file:

Mateen Ulhaq's user avatar

31 Answers 31

os.listdir() will be slightly more efficient than using glob.glob . To test if a filename is an ordinary file (and not a directory or other entity), use os.path.isfile() :

bryant1410's user avatar

Luke's user avatar

For all kind of files, subdirectories included (Python 2):

Only files (avoiding subdirectories):

MattDMo's user avatar

This is where fnmatch comes very handy:

If you want to count all files in the directory — including files in subdirectories, the most pythonic way is:

We use sum that is faster than explicitly adding the file counts (timings pending)

An answer with pathlib and without loading the whole list to memory:

Paul's user avatar

Short and simple

Somyadeep Shrivastava's user avatar

I am surprised that nobody mentioned os.scandir :

qed's user avatar

Marcus Riemer's user avatar

ninjrok's user avatar

This uses os.listdir and works for any directory:

this can be simplified with a generator and made a little bit faster with:

While I agree with the answer provided by @DanielStutzbach: os.listdir() will be slightly more efficient than using glob.glob .

However, an extra precision, if you do want to count the number of specific files in folder, you want to use len(glob.glob()) . For instance if you were to count all the pdfs in a folder you want to use:

This is an easy solution that counts the number of files in a directory containing sub-folders. It may come in handy:

You should get an output similar to this (with the placeholders changed, of course):

jigi-33 / calculate_zise_of_directory_recursively.md

Надо посчитать размер всех файлов в подпапке, которая находится в главной папке, при этом не считать сам размер подпапки А вводить надо путь главной папки В главной папки всего 4 подпапки На экран должен выводится размер каждой подпапки отдельно Пытался что-то придумать с os.path.getsize(path) не вышло, решил потом вернусь, а время уже поджимает, можете помочь?

Для рекурсивного обхода всех подпапок есть os.walk, берите и используйте его тоже, они оба работают, я гарантирую это Найти суммарный размер всех регулярных файлов в каталоге, рекурсивно обходя все подкаталоги – подробности ниже.

root — это текущая папка на текущей итерации; dirs — список папок в root; files — список файлов в root; join(root, name) — объединяет путь от текущей папке к файлу в ней; getsize — вернет размер файла в байтах.

Хочу уточнить, что скрипт показывает размер файлов в папке, но не подсчитывает размер папки с учетом других папок.

Поэтому, если нужно подсчитать размер папки с учетом вложенных папок, можно попробовать такой вариант:

Параметр topdown=False говорит что перебор нужно делать не с корневой папки, а наоборот — с самого низа.

Если нужен размер в человеко-читаемом формате показать, можно воспользоваться функцией:

Это работает! Тут можно и try/catch, и с аргументами walk’а followlinks и onerror поиграться.

Похожие статьи