Чтобы пропустить каталоги, вы можете сделать '* .fileextension' для любого расширения файла, которое вы ищете.
Ответы:
275
os.listdir()будет немного более эффективным, чем использование glob.glob. Чтобы проверить, является ли имя файла обычным файлом (а не каталогом или другим объектом), используйте os.path.isfile():
import os, os.path
# simple version for working with CWDprint 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))])
Для рекурсивного подсчета файлов, вложенных в каталоги, вам лучше использовать решение os.walk ().
Джоэл Б,
В чем выгода использования os.path.join(DIR, name)более DIR + '/' + name? Последний короче и, ИМО, более понятен, чем первый. Возможно, есть какие-нибудь ОС, на которых последняя не сможет работать?
Привет, до свидания,
@HelloGoodbye Именно в этом причина.
ellockie
102
import os
path, dirs, files = next(os.walk("/usr/lib"))
file_count = len(files)
Это намного быстрее (примерно вдвое меньше времени, когда я тестировал каталог с 10 000 файлов), если вы знаете шаблон, который вы ищете, вместо того, чтобы тестировать каждый файл с os.path.isfile()помощью принятого ответа. Также значительно быстрее, чем glob.glob().
CivFan
14
Если вы хотите сосчитать все файлы в каталоге, включая файлы в подкаталогах, самый питонический способ:
import os
file_count = sum(len(files)for _, _, files in os.walk(r'C:\Dropbox'))print(file_count)
Мы используем сумму, которая быстрее, чем явное добавление количества файлов (время ожидания)
Привет, я пытался понять этот код (код работает отлично), я знаю, что мы можем использовать _в forцикле. os.walkтакже я знаю. Но не уверен, что происходит с подчеркиванием внутри sumфункции, не могли бы вы уточнить. Спасибо!
Ejaz
1
Unsderscore - это просто имя переменной @Ejaz, по соглашению используемое, когда мы игнорируем переменную - это то, что мы делаем здесь - мы называем walk и подсчитываем только количество файлов в каждом каталоге, игнорируя возвращаемые значения root и dirs walk
def count_em(valid_path):
x =0for root, dirs, files in os.walk(valid_path):for f in files:
x = x+1print"There are", x,"files in this directory."return x
Синтаксический анализ выходных данных lsобычно не одобряется (это может часто вызывать проблемы), хотя это не плохой «быстрый и грязный» метод в оболочке. Вы должны использовать ls -1, однако, так что это гарантирует одну строку на файл.
Bloodgain
3
Хотя я согласен с ответом, предоставленным @DanielStutzbach: os.listdir()будет несколько более эффективным, чем использование glob.glob.
Тем не менее, дополнительную точность, если вы хотите посчитать количество определенных файлов в папке, вы хотите использовать len(glob.glob()). Например, если вам нужно сосчитать все PDF-файлы в папке, которую вы хотите использовать:
он просто считает количество файлов в каталоге, я использовал технику осмысления списка, чтобы перебрать определенный каталог, возвращая все файлы взамен. «len (возвращенный список)» возвращает количество файлов.
ОП запросил количество файлов , в нем также перечислены каталоги.
Коре
1
Если вы будете использовать стандартную оболочку операционной системы, вы можете получить результат гораздо быстрее, чем с использованием чисто питонического способа.
Я нашел другой ответ, который может быть правильным как принятый ответ.
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)
я сделал это, и это вернуло количество файлов в папке (Attack_Data) ... это работает отлично.
import os
def fcount(path):#Counts the number of files in a directory
count =0for f in os.listdir(path):if os.path.isfile(os.path.join(path, f)):
count +=1return count
path = r"C:\Users\EE EKORO\Desktop\Attack_Data"#Read files in folderprint(fcount(path))
Ответы:
os.listdir()
будет немного более эффективным, чем использованиеglob.glob
. Чтобы проверить, является ли имя файла обычным файлом (а не каталогом или другим объектом), используйтеos.path.isfile()
:источник
folder_path
внутри,os.path.filename(name)
если вы не на CWD. stackoverflow.com/questions/17893542/…os.path.join(DIR, name)
болееDIR + '/' + name
? Последний короче и, ИМО, более понятен, чем первый. Возможно, есть какие-нибудь ОС, на которых последняя не сможет работать?источник
Для всех видов файлов, подкаталоги включены:
Только файлы (без подкаталогов):
источник
Вот где очень удобно использовать fnmatch:
Более подробная информация: http://docs.python.org/2/library/fnmatch.html
источник
os.path.isfile()
помощью принятого ответа. Также значительно быстрее, чемglob.glob()
.Если вы хотите сосчитать все файлы в каталоге, включая файлы в подкаталогах, самый питонический способ:
Мы используем сумму, которая быстрее, чем явное добавление количества файлов (время ожидания)
источник
_
вfor
цикле.os.walk
также я знаю. Но не уверен, что происходит с подчеркиванием внутриsum
функции, не могли бы вы уточнить. Спасибо!источник
источник
Я удивлен, что никто не упомянул
os.scandir
:источник
Это использует
os.listdir
и работает для любого каталога:это можно упростить с помощью генератора и сделать немного быстрее с помощью:
источник
Взято из этого поста
источник
files
это список. 2. ОП не ищет рекурсивный счетисточник
Код Люка переформатировать.
источник
Вот простая однострочная команда, которая мне показалась полезной:
источник
ls
обычно не одобряется (это может часто вызывать проблемы), хотя это не плохой «быстрый и грязный» метод в оболочке. Вы должны использоватьls -1
, однако, так что это гарантирует одну строку на файл.Хотя я согласен с ответом, предоставленным @DanielStutzbach:
os.listdir()
будет несколько более эффективным, чем использованиеglob.glob
.Тем не менее, дополнительную точность, если вы хотите посчитать количество определенных файлов в папке, вы хотите использовать
len(glob.glob())
. Например, если вам нужно сосчитать все PDF-файлы в папке, которую вы хотите использовать:источник
Это просто:
он просто считает количество файлов в каталоге, я использовал технику осмысления списка, чтобы перебрать определенный каталог, возвращая все файлы взамен. «len (возвращенный список)» возвращает количество файлов.
источник
источник
Если вы будете использовать стандартную оболочку операционной системы, вы можете получить результат гораздо быстрее, чем с использованием чисто питонического способа.
Пример для Windows:
источник
Я нашел другой ответ, который может быть правильным как принятый ответ.
источник
Я использовал
glob.iglob
для структуры каталогов, аналогичныхОбе из следующих опций возвращают 4 (как и ожидалось, т.е. не учитывают сами подпапки )
len(list(glob.iglob("data/train/*/*.png", recursive=True)))
sum(1 for i in glob.iglob("data/train/*/*.png"))
источник
я сделал это, и это вернуло количество файлов в папке (Attack_Data) ... это работает отлично.
источник