Я должен считать количество файлов в каталоге с помощью Python.
Я предполагаю, что самый легкий путь len(glob.glob('*'))
, но это также считает сам каталог как файл.
Там какой-либо путь состоит в том, чтобы считать только файлы в каталоге?
os.listdir ()
будет немного более эффективным, чем использование glob.glob
. Чтобы проверить, является ли имя файла обычным файлом (а не каталогом или другим объектом), используйте os.path.isfile ()
:
import os, os.path
# simple version for working with CWD
print 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.listdir
и работает для любого каталога:
import os
directory = 'mydirpath'
number_of_files = len([item for item in os.listdir(directory) if os.path.isfile(os.path.join(directory, item))])
это можно упростить с помощью генератора и сделать немного быстрее с помощью:
import os
isfile = os.path.isfile
join = os.path.join
directory = 'mydirpath'
number_of_files = sum(1 for item in os.listdir(directory) if isfile(join(directory, item)))
import os
def count_files(in_directory):
joiner= (in_directory + os.path.sep).__add__
return sum(
os.path.isfile(filename)
for filename
in map(joiner, os.listdir(in_directory))
)
>>> count_files("/usr/lib")
1797
>>> len(os.listdir("/usr/lib"))
2049
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
Взято из этого сообщения