Как мне прочитать количество файлов в папке, используя 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:
![]()
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() :
![]()
![]()
For all kind of files, subdirectories included (Python 2):
Only files (avoiding subdirectories):
![]()
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:
![]()
Short and simple
![]()
I am surprised that nobody mentioned os.scandir :
![]()
![]()
![]()
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 поиграться.