Форум сайта python.su
Приветствую. Нужна помощь по вычислению размера папок в т.ч. системных. Я в данный момент пришёл к выводу что win32com.client является максимально подходящим под мою задачу. Но вот такой вопрос:
import win32com.client as com
folderPath = 'C:\\Program Files'
fso = com.Dispatch("Scripting.FileSystemObject")
folder = fso.GetFolder(folderPath)
#folder = fso.GetSpecialFolder(1)
MB = 1024 * 1024.0
print("%.2f MB" % (folder.Size / MB))
Офлайн
Достаточно быстро это насколько ?
вот например
from os.path import join, getsize path = 'c:\\program files\\' size=0 for root, dirs, files in os.walk(path): size+=sum(getsize(join(root, name)) for name in files ) MB = 1024 * 1024.0 print(size / MB, 'MB' )
[code python][/code]
Отредактировано PEHDOM (Янв. 16, 2021 12:14:23)
Офлайн
PEHDOMСпасибо большое за то что откликнулись. Если говорить откровенно, то это не очень быстро.
Достаточно быстро это насколько ?вот например
Отредактировано Arco (Янв. 16, 2021 14:08:26)
Офлайн
Если вдруг у кого-нибудь есть модуль для вычислений на C++ который можно подключить к Python, буду рад если поделитесь.
Офлайн
Arcoоно работает, в том плане что получает обьект, а “разрешение отклонено” оно выдает когда вы пытаетесь получить доступ к свойству Size. Попробуйте вместо Size вывести, например, Name.
Там где в коде у меня закоментированная строка, она отвечает как раз за получение инфы о системных папках, но у меня так тоже не срабатывает с такой же ошибкой. Вот я и не могу понять почему вроде функция есть, а у меня не работает.
ArcoНу такое гуглиться за секунду:
Если вдруг у кого-нибудь есть модуль для вычислений на C++ который можно подключить к Python, буду рад если поделитесь.
ArcoА вот тут самое интересное:
если вам не сложно, возьмите папку гиг на 50 и там будет заметна разница. (Ну на моём железе - Hdd 7200 об.мин.)
import time, os from pathlib import Path from os.path import join, getsize import win32com.client as com folderPath = 'd:\\_Games\\Games' MB = 1024 * 1024 s_time = (time.time()) fso = com.Dispatch("Scripting.FileSystemObject") folder = fso.GetFolder(folderPath) print('#1, win32com:', int(folder.Size / MB), 'MB', time.time() - s_time) s_time = (time.time()) root_directory = Path(folderPath) print('#2, pathlib:', int(sum(f.stat().st_size for f in root_directory.glob('**/*') if f.is_file()) / MB), 'MB', time.time() - s_time) s_time = (time.time()) size=0 for root, dirs, files in os.walk(folderPath): size+=sum(getsize(join(root, name)) for name in files ) print('#3 os.walk:', int(size / MB), 'MB' , time.time() - s_time)
>>>
#1, win32com: 626330 MB 184.51770329475403
#2, pathlib: 626330 MB 105.98217296600342
#3 os.walk: 626330 MB 49.874070167541504
>>>
>>>
#1, win32com: 626330 MB 3.32000470161438
#2, pathlib: 626330 MB 87.87312316894531
#3 os.walk: 626330 MB 49.45407009124756
>>>
[code python][/code]
Отредактировано PEHDOM (Янв. 17, 2021 21:59:04)
Офлайн