Files
projects_stats/main.py
2025-08-29 18:36:49 +02:00

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()