58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
# This script computes the sizes of the folders listed in args.json
|
|
|
|
import os
|
|
import json
|
|
import csv
|
|
from tqdm import tqdm
|
|
|
|
class Folder:
|
|
def __init__(self, folder_path, desc_prefix=""):
|
|
self.folder_path = folder_path
|
|
self.size = 0
|
|
self.files = 0
|
|
self.desc_prefix = desc_prefix
|
|
|
|
def desc(self) -> str:
|
|
return f"{self.desc_prefix}{self.folder_path} - {self.size}B"
|
|
|
|
def get_size(self) -> int:
|
|
"""Return the size in Bytes of the folder"""
|
|
p_bar = tqdm(desc=self.desc(), unit=' file')
|
|
for path, dirs, files in os.walk(self.folder_path):
|
|
for f in files:
|
|
fp = os.path.join(path, f)
|
|
self.size += os.path.getsize(fp)
|
|
self.files += 1
|
|
p_bar.set_description(self.desc(), refresh=False)
|
|
p_bar.update()
|
|
|
|
p_bar.set_description(self.desc(), refresh=True)
|
|
p_bar.close()
|
|
return self.size
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Initialize CSV
|
|
csv_file = open('output.csv', 'w', newline='')
|
|
spamwriter = csv.writer(csv_file, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
|
|
spamwriter.writerow(['folder_path', 'size_B', 'files'])
|
|
|
|
folders = []
|
|
|
|
with open('args.json', 'r') as file:
|
|
data = json.load(file)
|
|
|
|
nb_folders = len(data['folder_paths'])
|
|
|
|
for i, folder_path in enumerate(data['folder_paths']):
|
|
folders.append(Folder(folder_path, desc_prefix=f"[{i+1: >3}/{nb_folders}] "))
|
|
|
|
# Calculate the size of all folders
|
|
for folder in folders:
|
|
folder.get_size()
|
|
# Write info in CSV
|
|
spamwriter.writerow([folder.folder_path, folder.size, folder.files])
|
|
|
|
csv_file.close()
|
|
|
|
|