Мне нужно освободить место на диске с большим количеством файлов. Я хочу найти, какие папки занимают больше места в определенном месте, называемом C: \ RS_Data. Как только я определю, какой из sufolders занимает больше всего пространства, я хочу развернуть эти подпапки и выполнить ту же задачу. Так Iw ульд хотел разработать скрипт, который будет работать со мной указав путь для возвращения размера файлов и папок, Это может быть что-то вроде этого: C: \ RS_Data: Sub_Folder_1: 566000 кб Sub_Folder_2: 323333 кб Sub_folder_3 : 3,123,456 кб random_file.ext: 3123 кбPython - укажите размер подпапок в указанной папке
и так далее ...
Я тогда хотел запустить тот же сценарий на скажем Sub_folder_3.
Я нашел следующий сценарий на форуме и добавил paths.append (путь в строке 22:.
import locale
import os
locale.setlocale(locale.LC_ALL, "")
def get_size(state, root, names):
paths = [os.path.realpath(os.path.join(root, n)) for n in names]
# handles dangling symlinks
state[0] += sum(os.stat(p).st_size for p in paths if os.path.exists(p))
def print_sizes(root):
total = 0
paths = []
state = [0]
n_ind = s_ind = 0
for name in sorted(os.listdir(root)):
path = os.path.join(root, name)
if not os.path.isdir(path):
continue
paths.append(path)
state[0] = 0
os.path.walk(path, get_size, state)
total += state[0]
s_size = locale.format('%8.0f', state[0], 3)
n_ind = max(n_ind, len(name), 5)
s_ind = max(s_ind, len(s_size))
paths.append((name, s_size))
for name, size in paths:
print name.ljust(n_ind), size.rjust(s_ind), 'bytes'
s_total = locale.format('%8.0f', total, 3)
print '\ntotal'.ljust(n_ind), s_total.rjust(s_ind), 'bytes'
print_sizes('.')
Я получил сообщение об ошибке, что там было слишком много значения распаковывать Есть ли способ Ài может работать это со сценарием, работающий на пути, по которому я определяю?
Спасибо.
Я взял образец рекомендовал ниже и изменить его, так что функция может выполняться в цикле. Это возвращает 0 для всех файлов и папки в родительской папке. де:
import os
myDir = "C:\\RS_Data"
folders = os.listdir(myDir)
for file in folders:
def get_size(start_path = file):
global total_size
total_size = 0
for dirpath, dirnames, filenames in os.walk(start_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
return total_size
print os.path.basename(file),":", get_size()
Вот результат:
Attribute.gdb : 0
Bookmarks : 0
calculations : 0
Common : 0
Copy of CO_054_Run Batch Files.bat : 0
CO_003_Run Batch Files.bat : 0
CO_052_Run Batch Files.bat : 0
CO_053_Run Batch Files.bat : 0
CO_054_2_Run_Batch_Files.bat : 0
CO_054_Run Batch Files.bat : 0
CO_073_Run Batch Files_Old.bat : 0
CO_073_Run_Batch_Files.bat : 0
CO_073_Run_Batch_FilesREV1.bat : 0
gdb backups : 0
GeocodingInformation.gdb : 0
GeocodingInformation.ldb : 0
GeocodingInformation.mdb : 0
GeocodingInformationold.mdb : 0
GIS_Projects : 0
Models : 0
Network : 0
Non_RS_MXDs : 0
old2Run Batch Files.bat : 0
old3Run Batch Files.bat : 0
OldCO_052_053_054_Run Batch Files2.bat : 0
OldCO_052_053_054_Run Batch FilesIJ.bat : 0
oldCO_052_Run Batch Files.bat : 0
oldCO_053_Run Batch Files.bat : 0
oldCO_073_Run Batch Files.bat : 0
orig_rs_system.mdb : 0
orig_rs_system_backup.mdb : 0
PatternGroup.gdb : 0
Python : 0
Recovered : 0
robocopy.exe : 0
ROBOUSERS.OUT : 0
rs_system.mdb : 0
rs_system_backup.mdb : 0
rs_system_backupnew.ldb : 0
rs_system_backupnew.mdb : 0
Run Batch Files_old.bat : 0
Scrap : 0
Temp : 0
Templates.gdb : 0
Workspace : 0
WorkspacesSettings.gdb : 0
Если я запустить сценарий без цикла он возвращает накопительный размер указанной папки.
Зачем использовать код на всех? Не будет ли эта команда делать то же самое, и вы можете отправить ее в файл, если хотите: dir c: \ myfolder/O: -S/S – mrunion
Не уверен, но я думаю, что вам нужно запустить это в командной строке ? Если это так, у меня нет доступа, поскольку я убегаю от тонкого клиента и не имею прав администратора на сервере. – ShaunO
ОК, справедливо. Но как вы собираетесь запускать свою программу Python? – mrunion