Python Folder Size Calculator Example

Build a simple Python script that calculates the total size of files inside a folder. This example helps beginners practice working with file paths, loops, and the os module.

If you want the shortest working version first, start here:

import os

folder_path = "."
total_size = 0

for name in os.listdir(folder_path):
    path = os.path.join(folder_path, name)
    if os.path.isfile(path):
        total_size += os.path.getsize(path)

print(f"Total size: {total_size} bytes")

This quick version adds the size of files in one folder only. A later section expands it to include subfolders.

What this example does

This example shows how to:

  • Calculate the total size of files in a folder
  • Combine os.listdir(), os.path.join(), and os.path.getsize()
  • Understand how file system paths work in Python
  • Solve one practical task with a small script

This is a good beginner project because it uses a loop, file paths, and built-in standard library tools in one place.

What you need to know first

Before reading the code, it helps to understand a few basics:

  • A folder can contain files and subfolders
  • A file path tells Python where a file or folder is
  • The os module gives you tools for working with files and folders
  • A loop lets you process items one by one

If file paths still feel confusing, see working with file paths in Python.

Simple version: total size of files in one folder

This version checks one folder only. It does not go inside subfolders.

import os

folder_path = "."

total_size = 0

for name in os.listdir(folder_path):
    path = os.path.join(folder_path, name)

    if os.path.isfile(path):
        total_size += os.path.getsize(path)

print(f"Total size: {total_size} bytes")

How it works

  • os.listdir(folder_path) gets the names of items in the folder
  • os.path.join(folder_path, name) builds the full path
  • os.path.isfile(path) checks whether the item is a file
  • os.path.getsize(path) gets the file size in bytes

Why os.path.join() matters

Do not build paths by hand with string addition. This can break on different operating systems.

Good:

path = os.path.join(folder_path, name)

Less reliable:

path = folder_path + "/" + name

If you want a deeper explanation, see os.path.join() explained.

Example output

Total size: 15432 bytes

Recursive version: include subfolders

The basic version only counts files in the current folder. If you want the total size of a folder and everything inside it, including subfolders, use os.walk().

import os

folder_path = "."

total_size = 0

for root, dirs, files in os.walk(folder_path):
    for name in files:
        path = os.path.join(root, name)
        total_size += os.path.getsize(path)

print(f"Total size: {total_size} bytes")

How this version works

  • os.walk(folder_path) goes through the folder and all subfolders
  • root is the current folder being processed
  • files is a list of file names in that folder
  • Each file path is built with os.path.join(root, name)
  • The script adds the size of every file it finds

This version is usually more useful for real folder size checks.

Show the size in a readable format

File sizes in bytes are correct, but they are not always easy to read. You can add a helper function to show sizes in KB, MB, or GB.

import os

def format_size(size_in_bytes):
    units = ["bytes", "KB", "MB", "GB", "TB"]
    size = float(size_in_bytes)

    for unit in units:
        if size < 1024 or unit == units[-1]:
            return f"{size:.2f} {unit}"
        size /= 1024

folder_path = "."
total_size = 0

for root, dirs, files in os.walk(folder_path):
    for name in files:
        path = os.path.join(root, name)
        total_size += os.path.getsize(path)

print(f"Folder: {folder_path}")
print(f"Total size: {format_size(total_size)}")

Example output

Folder: .
Total size: 2.45 MB

The helper function keeps the conversion logic separate from the main loop, which makes the script easier to read.

Common problems and how to avoid them

Here are the most common reasons this script does not work as expected:

  • The folder path is wrong
  • The script counts only the current folder, not subfolders
  • File paths are built incorrectly
  • A permission error blocks access to some files
  • The output is shown only in bytes when you expected KB or MB

1. The folder path does not exist

If the path is wrong, Python may raise an error such as FileNotFoundError.

Check the path first:

import os

folder_path = "my_folder"
print(folder_path)
print(os.path.exists(folder_path))

If False is printed, the path is not valid from the script's current location.

For help with this error, see how to fix FileNotFoundError: Errno 2 No such file or directory.

2. You expected subfolders to be included

This is a very common mistake. The os.listdir() version only checks one folder level.

If you want subfolders too, switch to os.walk().

3. Paths are built incorrectly

Always combine paths with os.path.join().

You can debug by printing the path:

import os

folder_path = "."
for name in os.listdir(folder_path):
    path = os.path.join(folder_path, name)
    print(path)

You can also learn more in how to list files in a directory in Python and os.listdir() explained.

4. A folder is passed to getsize()

os.path.getsize() works on paths, but in this kind of script you usually want file sizes only.

Check with os.path.isfile(path) first:

import os

folder_path = "."

for name in os.listdir(folder_path):
    path = os.path.join(folder_path, name)
    print(os.path.isfile(path))

5. Permission errors stop the script

Some files may not be accessible. In that case, you may get PermissionError.

A simple way to make the script more robust is to skip files that cannot be read:

import os

folder_path = "."
total_size = 0

for root, dirs, files in os.walk(folder_path):
    for name in files:
        path = os.path.join(root, name)
        try:
            total_size += os.path.getsize(path)
        except PermissionError:
            print(f"Skipped: {path}")

print(f"Total size: {total_size} bytes")

If this happens often, read how to fix PermissionError: Errno 13 Permission denied.

Helpful debugging prints

When the result looks wrong, these simple checks can help:

print(folder_path)
print(os.path.exists(folder_path))
print(os.path.isfile(path))
print(os.path.getsize(path))
print(root, files)

Ways to improve the script

Once the basic version works, you can extend it in useful ways:

  • Ask the user for a folder path with input()
  • Skip hidden files if needed
  • Show the largest files in the folder
  • Print separate totals for each subfolder

Here is one simple improvement that lets the user choose the folder:

import os

folder_path = input("Enter a folder path: ")
total_size = 0

for root, dirs, files in os.walk(folder_path):
    for name in files:
        path = os.path.join(root, name)
        total_size += os.path.getsize(path)

print(f"Total size: {total_size} bytes")

You could also combine this with the readable size function from the earlier section.

FAQ

Does this script include subfolders?

The basic version does not. Use a recursive version with os.walk() to include subfolders.

Why am I getting FileNotFoundError?

The path may be wrong, or the current working directory may not be what you expect.

Why is the size shown in bytes?

os.path.getsize() returns bytes. You can convert that value to KB, MB, or GB.

Can I calculate folder size with pathlib instead of os?

Yes, but this example keeps things simple by using os tools that many beginners learn first.

See also

Try extending this example next by adding subfolder support, readable file sizes, or a report that shows the largest files.