---
title: Modules, Packages, and File Handling
date: 2026-01-03T18:14:43Z
modified: 2026-01-04T20:27:28Z
permalink: "https://www.micheledpierri.com/python/modules-files/"
type: page
status: publish
excerpt: ""
wpid: 2505
featured_image: "https://www.micheledpierri.com/wp-content/uploads/2026/01/Python_08.webp"
featured_image_alt: Children dressed in lab coats are studying a python
timestamp: 2026-01-04T20:27:28Z
tags: []
---

##  Lesson Objectives

By the end of this lesson, you will be able to:

- Import and use Python modules
- Understand the difference between modules and packages
- Read from and write to text files
- Organize code into reusable components

This lesson introduces **scalability**:

code stops living in a single file and becomes a structured system.

---

## 1️⃣ What Is a Module

A **module** is a Python file that contains:

- functions
- variables
- classes

Every `.py` file is a module.

Example:

# math.py
def square(x):
    return x * x

```
<span class="line"><span style="color: #6272A4"># math.py</span></span>
<span class="line"><span style="color: #FF79C6">def</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">square</span><span style="color: #F8F8F2">(</span><span style="color: #FFB86C; font-style: italic">x</span><span style="color: #F8F8F2">):</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">return</span><span style="color: #F8F8F2"> x </span><span style="color: #FF79C6">*</span><span style="color: #F8F8F2"> x</span></span>
<span class="line"></span>
<span class="line"></span>
```

You can use it in another file.

---

## 2️⃣ Importing Modules

### Import the Entire Module

import math
print(math.sqrt(16))

```
<span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> math</span></span>
<span class="line"><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(math.sqrt(</span><span style="color: #BD93F9">16</span><span style="color: #F8F8F2">))</span></span>
<span class="line"></span>
<span class="line"></span>
```

You access module content using dot notation.

### Import Specific Objects

from math import sqrt
print(sqrt(16))

```
<span class="line"><span style="color: #FF79C6">from</span><span style="color: #F8F8F2"> math </span><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> sqrt</span></span>
<span class="line"><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(sqrt(</span><span style="color: #BD93F9">16</span><span style="color: #F8F8F2">))</span></span>
<span class="line"></span>
<span class="line"></span>
```

Use this carefully to avoid name conflicts.

### Aliasing Imports

import numpy as np

```
<span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> numpy </span><span style="color: #FF79C6">as</span><span style="color: #F8F8F2"> np</span></span>
<span class="line"></span>
<span class="line"></span>
```

This is extremely common in data analysis.

---

## 3️⃣ Built-in vs External Modules

### Built-in Modules

Python ships with many built-in modules:

- `math`
- `os`
- `sys`
- `random`

Example:

import random
random.randint(1, 10)

```
<span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> random</span></span>
<span class="line"><span style="color: #F8F8F2">random.randint(</span><span style="color: #BD93F9">1</span><span style="color: #F8F8F2">, </span><span style="color: #BD93F9">10</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

---

### External Packages

External packages must be installed.

Example (in terminal):

pip install numpy

```
<span class="line"><span style="color: #50FA7B">pip</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">install</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">numpy</span></span>
<span class="line"></span>
<span class="line"></span>
```

Then (in code editor):

import numpy as np

```
<span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> numpy </span><span style="color: #FF79C6">as</span><span style="color: #F8F8F2"> np</span></span>
<span class="line"></span>
<span class="line"></span>
```

This is how the scientific ecosystem works.

---

## 4️⃣ What Is a Package

A **package** is a collection of modules.

Example structure:

my_project/
│
├── analysis/
│   ├── __init__.py
│   ├── stats.py
│   └── preprocessing.py

```
<span class="line"><span style="color: #50FA7B">my_project/</span></span>
<span class="line"><span style="color: #50FA7B">│</span></span>
<span class="line"><span style="color: #50FA7B">├──</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">analysis/</span></span>
<span class="line"><span style="color: #50FA7B">│</span><span style="color: #F8F8F2">   </span><span style="color: #F1FA8C">├──</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">__init__.py</span></span>
<span class="line"><span style="color: #50FA7B">│</span><span style="color: #F8F8F2">   </span><span style="color: #F1FA8C">├──</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">stats.py</span></span>
<span class="line"><span style="color: #50FA7B">│</span><span style="color: #F8F8F2">   </span><span style="color: #F1FA8C">└──</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">preprocessing.py</span></span>
<span class="line"></span>
<span class="line"></span>
```

Packages allow:

- logical grouping
- reusable pipelines
- clean project structure

---

## 5️⃣ Reading Files in Python

Reading files is fundamental in data analysis.

### Basic File Reading

file = open("data.txt", "r")
content = file.read()
file.close()

```
<span class="line"><span style="color: #50FA7B">file</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">=</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">open</span><span style="color: #F8F8F2">(</span><span style="color: #50FA7B">"data.txt"</span><span style="color: #50FA7B">,</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">r</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #50FA7B">content</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">=</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">file.read</span><span style="color: #F8F8F2">()</span></span>
<span class="line"><span style="color: #50FA7B">file.close</span><span style="color: #F8F8F2">()</span></span>
<span class="line"></span>
<span class="line"></span>
```

This works, but it is **not recommended**.

### Using `with` (Best Practice)

with open("data.txt", "r") as file:
    content = file.read()

```
<span class="line"><span style="color: #50FA7B">with</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">open</span><span style="color: #F8F8F2">(</span><span style="color: #50FA7B">"data.txt"</span><span style="color: #50FA7B">,</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">r</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">) </span><span style="color: #F1FA8C">as</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">file:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">content</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">=</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">file.read</span><span style="color: #F8F8F2">()</span></span>
<span class="line"></span>
<span class="line"></span>
```

Why `with`?

- automatically closes the file
- safer and cleaner

---

## 6️⃣ Writing Files in Python

### Writing Text

with open("output.txt", "w") as file:
    file.write("Hello Python")

```
<span class="line"><span style="color: #50FA7B">with</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">open</span><span style="color: #F8F8F2">(</span><span style="color: #50FA7B">"output.txt"</span><span style="color: #50FA7B">,</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">w</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">) </span><span style="color: #F1FA8C">as</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">file:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">file.write(</span><span style="color: #50FA7B">"Hello Python"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

Mode `"w"` overwrites existing files.

### Appending Text

with open("output.txt", "a") as file:
    file.write("\\nNew line")

```
<span class="line"><span style="color: #50FA7B">with</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">open</span><span style="color: #F8F8F2">(</span><span style="color: #50FA7B">"output.txt"</span><span style="color: #50FA7B">,</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">a</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">) </span><span style="color: #F1FA8C">as</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">file:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">file.write(</span><span style="color: #50FA7B">"</span><span style="color: #FF79C6">\\</span><span style="color: #50FA7B">nNew line"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

---

## 7️⃣ Reading Files Line by Line

Useful for large files.

with open("data.txt", "r") as file:
    for line in file:
        print(line.strip())

```
<span class="line"><span style="color: #50FA7B">with</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">open</span><span style="color: #F8F8F2">(</span><span style="color: #50FA7B">"data.txt"</span><span style="color: #50FA7B">,</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">r</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">) </span><span style="color: #F1FA8C">as</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">file:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">for</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">line</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">in</span><span style="color: #F8F8F2"> file:</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(line.strip())</span></span>
<span class="line"></span>
<span class="line"></span>
```

This pattern is common when processing logs or datasets.

---

## 8️⃣ Why This Matters for Data Analysis

Modules and files allow you to:

- separate logic (clean code)
- reuse functions across projects
- load datasets from disk
- save results and reports

Every serious analytical workflow depends on these concepts.

---

## FAQ — Frequently Asked Questions

**Q: What happens if the file does not exist?**

A: Python raises a `FileNotFoundError`.

**Q: Should I always use `with` when opening files?**

A: Yes, almost always.

**Q: Where should my modules live?**

A: Inside the project folder, organized by purpose.

**Q: Are CSV and Excel files read this way?**

A: Technically yes, but libraries like `pandas` are preferred.

---

## Exercises

### Exercise 1

Import the `math` module and compute the square root of 25.

### Exercise 2

Import only `pi` from `math` and print it.

### Exercise 3

Create a module `utils.py` with a function `cube(x)`.

### Exercise 4

Import `cube` in another file and use it.

### Exercise 5

Write a file called `hello.txt` containing `"Hello Python"`.

### Exercise 6

Append a second line to the same file.

### Exercise 7

Read and print the content of `hello.txt`.

### Exercise 8

Read a file line by line.

### Exercise 9

Explain why `with` is safer than `open()` + `close()`.

### Exercise 10

Explain why modules are essential in large projects.

---

## Solutions

### Exercise 1

import math
math.sqrt(25)

```
<span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> math</span></span>
<span class="line"><span style="color: #F8F8F2">math.sqrt(</span><span style="color: #BD93F9">25</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 2

from math import pi
print(pi)

```
<span class="line"><span style="color: #FF79C6">from</span><span style="color: #F8F8F2"> math </span><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> pi</span></span>
<span class="line"><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(pi)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 3

# utils.py
def cube(x):
    return x ** 3

```
<span class="line"><span style="color: #6272A4"># utils.py</span></span>
<span class="line"><span style="color: #FF79C6">def</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">cube</span><span style="color: #F8F8F2">(</span><span style="color: #FFB86C; font-style: italic">x</span><span style="color: #F8F8F2">):</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">return</span><span style="color: #F8F8F2"> x </span><span style="color: #FF79C6">**</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">3</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 4

from utils import cube
cube(3)

```
<span class="line"><span style="color: #FF79C6">from</span><span style="color: #F8F8F2"> utils </span><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> cube</span></span>
<span class="line"><span style="color: #F8F8F2">cube(</span><span style="color: #BD93F9">3</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 5

with open("hello.txt", "w") as f:
    f.write("Hello Python")

```
<span class="line"><span style="color: #FF79C6">with</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">open</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">hello.txt</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">, </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">w</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">) </span><span style="color: #FF79C6">as</span><span style="color: #F8F8F2"> f:</span></span>
<span class="line"><span style="color: #F8F8F2">    f.write(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Hello Python</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 6

with open("hello.txt", "a") as f:
    f.write("\\nSecond line")

```
<span class="line"><span style="color: #FF79C6">with</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">open</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">hello.txt</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">, </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">a</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">) </span><span style="color: #FF79C6">as</span><span style="color: #F8F8F2"> f:</span></span>
<span class="line"><span style="color: #F8F8F2">    f.write(</span><span style="color: #E9F284">"</span><span style="color: #FF79C6">\\</span><span style="color: #F1FA8C">nSecond line</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

## Exercise 7

with open("hello.txt", "r") as f:
    print(f.read())

```
<span class="line"><span style="color: #FF79C6">with</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">open</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">hello.txt</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">, </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">r</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">) </span><span style="color: #FF79C6">as</span><span style="color: #F8F8F2"> f:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(f.read())</span></span>
<span class="line"></span>
<span class="line"></span>
```

## Exercise 8

with open("hello.txt", "r") as f:
    for line in f:
        print(line.strip())

```
<span class="line"><span style="color: #FF79C6">with</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">open</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">hello.txt</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">, </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">r</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">) </span><span style="color: #FF79C6">as</span><span style="color: #F8F8F2"> f:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">for</span><span style="color: #F8F8F2"> line </span><span style="color: #FF79C6">in</span><span style="color: #F8F8F2"> f:</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(line.strip())</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 9

# Automatic file closing, fewer errors

```
<span class="line"><span style="color: #6272A4"># Automatic file closing, fewer errors</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 10

# Modules improve structure, reuse, and maintainability

```
<span class="line"><span style="color: #6272A4"># Modules improve structure, reuse, and maintainability</span></span>
<span class="line"></span>
<span class="line"></span>
```

---

## 🚀 Next Lesson Preview

In **Lesson 9**, we will cover:

- runtime errors
- exceptions
- `try / except` blocks
- writing robust and fault-tolerant code

## This is where Python code becomes **reliable**, not just correct.