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

Пожалуйста, помогите с задачей на python!

Напишите программу, которая получает на вход путь до каталога (это может быть и просто корень диска) и выводит общее количество файлов и подкаталогов в нём. Также выведите на экран размер каталога в килобайтах (1 килобайт = 1024 байт).

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

Результат работы программы на примере python_basic\Module14:

E:\PycharmProjects\python_basic\Module14
Размер каталога (в Кб): 8.373046875
Количество подкаталогов: 7
Количество файлов: 15

Вот пример кода на Python:

def count_files_dirs_size(path):
size = 0
files = 0
dirs = 0
for dirpath, dirnames, filenames in os.walk(path):
for f in filenames:
fp = os.path.join(dirpath, f)
size += os.path.getsize(fp)
files += 1
dirs += len(dirnames)
return (files, dirs, size)

path = input(«Введите путь до каталога: «)
(files, dirs, size) = count_files_dirs_size(path)

print(«Размер каталога (в Кб):», size/1024)
print(«Количество подкаталогов:», dirs)
print(«Количество файлов:», files)

При запуске программы, пользователь должен ввести путь до каталога.
В функции `count_files_dirs_size` мы с помощью `os.walk` проходим по всем директориям и файлам в указанном каталоге.
Затем мы увеличиваем переменные `size` для подсчета размера каталога (суммируем размеры всех файлов), `files` для подсчета количества файлов и `dirs` для подсчета количества подкаталогов.
В функции мы возвращаем кортеж, содержащий количество файлов, каталогов и размер каталога.

После этого, мы выводим на экран результаты с помощью функции `print()`. Размер каталога в килобайтах, подсчитывается делением переменной `size` на 1024.import os

Источник

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

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

import os.path path = '.' num_files = len([f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]) 
num_files = sum(os.path.isfile(os.path.join(path, f)) for f in os.listdir(path)) 
>>> import glob >>> print len(glob.glob('/tmp/*')) 10 
>>> print [f for f in glob.glob('/tmp/*') if os.path.isfile(f)] ['/tmp/foo'] >>> print sum(os.path.isfile(f) for f in glob.glob('/tmp/*')) 1 

@lunaryorn — если вы хотите скрытые файлы в текущем каталоге, используйте glob(‘.*’) . Если вы хотите все, включая скрытые файлы, используйте glob(‘.*’) + glob(‘*’) .

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

Есть проблема, однако: если вы попытаетесь запустить ее для любой другой директории, чем «.», она не будет работать, поскольку 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) 

Источник

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

Мне нужно подсчитать количество файлов в каталоге с помощью 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))]) 
import os path, dirs, files = os.walk("/usr/lib").next() file_count = len(files) 

Для всех типов файлов вложенные подкаталоги:

import os list = os.listdir(dir) # dir is your directory path number_files = len(list) print number_files 

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

import os onlyfiles = next(os.walk(dir))[2] #dir is your directory path as string print len(onlyfiles) 

Здесь fnmatch очень удобен:

import fnmatch print len(fnmatch.filter(os.listdir(dirpath), '*.txt')) 
def directory(path,extension): list_dir = [] list_dir = os.listdir(path) count = 0 for file in list_dir: if file.endswith(extension): # eg: '.txt' count += 1 return count 
import os print len(os.listdir(os.getcwd())) 

Это использует 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))) 
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 
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 

Переформатирование кода Luke.

import os print len(os.walk('/usr/lib').next()[2]) 

Я удивлен, что никто не упомянул os.scandir :

def count_files(dir): return len([1 for x in list(os.scandir(dir)) if x.is_file()]) 

Вот простая однострочная команда, которую я нашел полезной:

print int(os.popen("ls | wc -l").read()) 
import os total_con=os.listdir('') files=[] for f_n in total_con: if os.path.isfile(f_n): files.append(f_n) print len(files) 

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

import os import subprocess def get_num_files(path): cmd = 'DIR \"%s\" /A-D /B /S | FIND /C /V ""' % path return int(subprocess.check_output(cmd, shell=True)) 

Я нашел другой ответ, который может быть правильным в качестве принятого ответа.

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) 

Я использовал glob.iglob для структуры каталогов, аналогичной

data └───train │ └───subfolder1 │ | │ file111.png │ | │ file112.png │ | │ . │ | │ └───subfolder2 │ │ file121.png │ │ file122.png │ │ . └───test │ file221.png │ file222.png 

Обе следующие опции возвращают 4 (как и ожидалось, т.е. не подсчитывают сами подпапки)

Я сделал это, и это вернуло количество файлов в папке (Attack_Data)… это отлично работает.

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 path = r"C:\Users\EE EKORO\Desktop\Attack_Data" #Read files in folder print (fcount(path)) 

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

import os file_count = sum(len(files) for _, _, files in os.walk(r'C:\Dropbox')) print(file_count) 

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

Источник

Задача «Размер каталога»

Напишите программу, которая получает на вход путь до каталога (это может быть и просто корень диска) и выводит общее количество файлов и подкаталогов в нём. Также выведите на экран размер каталога в килобайтах (1 килобайт = 1024 байт).

Результат работы программы на примере C:\Downloads:

Размер каталога (в Кб): 8.373046875
Количество подкаталогов: 7
Количество файлов: 15

Создать родительский класс «Склад» и 3 подкласса («принтеры»,» сканеры», «ксероксы»)
Начните работу над проектом «Склад оргтехники». Создайте класс, описывающий склад. А также класс.

Как выделить из строки название последнего каталога (без символов «\»)
Дана строка, содержащая полное имя файла. Выделить из строки название последнего каталога (без.

Написать программу проверки правильности написания сочетаний «жи», «ши», «ча», «ща»
Помогите пожалуйста написать программу проверки правильности написания сочетаний "жи", "ши", "ча".

Лучший ответ

Сообщение было отмечено Zaouza как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12
import os path = r'D:\TEST' total_size = 0 path, dirs, files = next(os.walk(path)) for f in files: fp = os.path.join(path, f) total_size += os.path.getsize(fp) print('Размер каталога (в Кб): ', total_size / 1024) print('Количество подкаталогов: ', len(dirs)) print('Количество файлов: ', len(files))

Спасибо! Подскажите пожалуйста, а как сделать чтобы считал абсолютный путь? И данный код считает количество файлов только в основной директории, а если там есть подкаталог, то в нем не считает.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
import os def file_sizes(path): for i_elem in os.listdir(path): if os.path.isfile(os.path.abspath(os.path.join(path,i_elem))): file_list = open('all_files.txt', 'a') file_path = os.path.abspath(os.path.join(path,i_elem)) file_size = str(os.path.getsize(file_path))+'\n' file_list.write(file_size) file_list.close() else: file_sizes(os.path.abspath(os.path.join(path,i_elem))) def dir_count(path): count = 0 for i_elem in os.listdir(path): if os.path.isdir(os.path.abspath(os.path.join(path,i_elem))): count += 1 return count def total_file_sizes(path): my_list = [] total_size = 0 total_files = 0 for i_elem in path: total_size += int(i_elem) total_files += 1 my_list.append(total_files) my_list.append(total_size/1024) return my_list path = os.path.abspath(os.path.join('..','..','Module22')) file_sizes(path) all_files = open('all_files.txt','r') my_list = total_file_sizes(all_files) all_files.close() os.remove('all_files.txt') print('Размер каталога (в Кб):',my_list[1]) print('Количество файлов:',my_list[0]) print('Количество подкаталогов:',dir_count(path))

Эксперт PythonЭксперт Java

satway, теперь попробуй подсчитать размер, например папки с виндой. И удивись — почему прога долго работает и падает.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
import os def file_sizes(path): files_stat = [0,0,0] for i_elem in os.listdir(path): if os.path.isfile(os.path.abspath(os.path.join(path,i_elem))): file_path = os.path.abspath(os.path.join(path,i_elem)) file_size = os.path.getsize(file_path) files_stat[0] += file_size files_stat[1] += 1 else: files_stat[0] += (file_sizes(os.path.abspath(os.path.join(path,i_elem))))[0] files_stat[1] += (file_sizes(os.path.abspath(os.path.join(path,i_elem))))[1] files_stat[2] += 1 return files_stat path = os.path.abspath(os.path.join('..','..','Module22')) print('Размер каталога (в Кб):',file_sizes(path)[0]/1024) print('Количество файлов:',file_sizes(path)[1]) print('Количество подкаталогов:',file_sizes(path)[2])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
import os def file_sizes(path): files_stat = [0,0,0] for i_elem in os.listdir(path): if os.path.isfile(os.path.abspath(os.path.join(path,i_elem))): file_path = os.path.abspath(os.path.join(path,i_elem)) file_size = os.path.getsize(file_path) files_stat[0] += file_size files_stat[1] += 1 else: result = file_sizes(os.path.abspath(os.path.join(path,i_elem))) files_stat[0] += result[0] files_stat[1] += result[1] files_stat[2] += 1 return files_stat path = os.path.abspath(os.path.join('..','..','Module22')) result = file_sizes(path) print('Размер каталога (в Кб):',result[0]/1024) print('Количество файлов:',result[1]) print('Количество подкаталогов:',result[2])

Источник

Читайте также:  Detailed information about css
Оцените статью