Ответ Марка Байера прост, элегантен и соответствует духу питона.
Однако есть проблема : если вы попытаетесь запустить его для любого другого каталога, кроме ".msgstr "это не удастся, так как os.listdir () возвращает имена файлов, а не полный путь.Эти два значения одинаковы при перечислении текущего рабочего каталога, поэтому ошибка не обнаруживается в указанном выше источнике.
Например, если вы находитесь по адресу "/ home / me" и вы указываете "/ tmp", вы 'получу (скажем) ['flashXVA67'].Вы будете тестировать «/ home / me / flashXVA67» вместо «/ tmp / flashXVA67» описанным выше способом.
Это можно исправить с помощью os.path.join (), например:
import os.path
path = './whatever'
count = len([f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))])
Кроме того, если вы собираетесь делать это много и требовать производительности, вы можете сделать это без создания дополнительных списков.Вот менее изящное, непонятное, но эффективное решение:
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
# The following line prints the number of files in the current directory:
path = "./whatever"
print fcount(path)