Каков наилучший способ получить размер папки и всех файлов внутри Python? - PullRequest
6 голосов
/ 02 декабря 2008

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

Ответы [ 4 ]

10 голосов
/ 02 декабря 2008

Ты имеешь в виду что-то подобное?

import os
for path, dirs, files in os.walk( root ):
    for f in files:
        print path, f, os.path.getsize( os.path.join( path, f ) )
5 голосов
/ 02 декабря 2008

Нет другого способа вычислить размер, кроме рекурсивного вызова stat. Это не зависит от Python; операционная система просто не предоставляет другого пути.

Алгоритм не должен быть рекурсивным; Вы можете использовать os.walk.

Для повышения эффективности могут быть два исключения:

  1. Если все файлы, которые вы хотите измерить, заполняют раздел, а у раздела нет других файлов, вы можете посмотреть использование диска разделом.
  2. Если вы можете постоянно отслеживать все файлы или сами отвечаете за создание всех файлов, вы можете сгенерировать добавочное использование диска.
1 голос
/ 02 декабря 2008

Существует рецепт для этой проблемы в Поваренной книге Питона (О'Рейли). Вы можете прочитать полное решение с примером онлайн:

http://safari.oreilly.com/0596001673/pythoncook-CHP-4-SECT-24

или здесь:

http://books.google.com/books?id=yhfdQgq8JF4C&pg=PA152&dq=du+command+in+python

0 голосов
/ 25 февраля 2012

Если вы используете систему posix, которая предоставляет du, вы можете использовать pexpect.run или subprocess для выполнения du <path to folder>, чтобы получить размер папки и подфайлов. Имейте в виду, что он выведет строку с каждым файлом в списке и каждой общей суммой папок. (Посмотрите на man-страницу du, чтобы узнать, что вы можете сделать, чтобы ограничить это).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...