๐Ÿ‡ฏ๐Ÿ‡ต ๆ—ฅๆœฌ่ชž | ๐Ÿ‡บ๐Ÿ‡ธ English | ๐Ÿ‡ช๐Ÿ‡ธ Espaรฑol | ๐Ÿ‡ต๐Ÿ‡น Portuguรชs | ๐Ÿ‡น๐Ÿ‡ญ เน„เธ—เธข | ๐Ÿ‡จ๐Ÿ‡ณ ไธญๆ–‡

Master File Handling in Python! A Complete Guide from Basic I/O to Advanced Techniques

To run Python from the command prompt or PowerShell on your PC, you need to download and install Python.
If you havenโ€™t installed it yet, please refer to the article Setting Up Python and Development Environment to install Python.

When you're programming, you'll inevitably encounter situations where you want to save your program's results to a file or read data from an external text file. With Python, these file operations are surprisingly easy. This article provides a thorough guide for web creators on the fundamentals of file reading and writing (I/O), from the very basics to advanced examples, complete with code you can copy and paste to see it work!

By the end of this article, you'll be able to handle files in Python with confidence. Let's dive in and make it work! ๐Ÿš€


First Steps in File Operations: The `open()` Function and `with` Statement

To handle files in Python, you start by using the built-in open() function to access the target file. A crucial concept to remember is the with statement. Using a with statement ensures the file is automatically closed after you're done, preventing you from forgetting to close it. This is considered standard Python practice, so let's learn them together.

The open() function primarily needs two pieces of information:

The three most basic modes are:

Also, when dealing with multi-byte characters, it's common practice to specify encoding='utf-8' to prevent garbled text. Now, let's see it in action!


Reading Files: Getting Data into Python

First, let's look at how to read the contents of a text file. We'll assume you have a file named sample.txt with the following content in the same directory as your Python script.

Hello, Python!
This is a sample text file.
Let's learn file operations.

read(): Read the Entire File at Once

The read() method fetches the entire content of a file and returns it as a single large string. It's ideal for small files.

<!-- Python Code -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        content = f.read()
        print(content)
except FileNotFoundError:
    print('Error: sample.txt not found.')

<!-- Expected Output -->
# Hello, Python!
# This is a sample text file.
# Let's learn file operations.

readlines(): Read Line by Line into a List

The readlines() method returns a list where each line is an element. Note that each line will include the newline character (\n) at the end.

<!-- Python Code -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        print(lines)
except FileNotFoundError:
    print('Error: sample.txt not found.')

<!-- Expected Output -->
# ['Hello, Python!\n', 'This is a sample text file.\n', "Let's learn file operations.\n"]

`for` Loop: Efficiently Read Large Files

If a file is very large, reading it all into memory at once with read() or readlines() is inefficient. In such cases, the best practice is to process the file line by line using a for loop. This is the most memory-efficient method.

<!-- Python Code -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        for line in f:
            # print() adds its own newline, so we strip the original one
            print(line.strip())
except FileNotFoundError:
    print('Error: sample.txt not found.')

<!-- Expected Output -->
# Hello, Python!
# This is a sample text file.
# Let's learn file operations.

Writing to Files: Saving Data from Python

Next, let's see how to write data generated in Python to a file. Pay attention to the difference between 'w' (write) and 'a' (append) modes.

write(): Write to a New File (Write Mode)

When you open a file in 'w' mode, a new file is created if it doesn't exist. If it does exist, its content is completely erased. You use the write() method to write strings.

Note: write() does not automatically add a newline. If you want a new line, you must add the newline character \n yourself at the end of the string.

<!-- Python Code -->
# List of content to write
lines_to_write = [
    'This is a new file.\n',
    'We are writing with the write() method.\n',
    'Newlines require \\n.\n'
]

with open('output.txt', 'w', encoding='utf-8') as f:
    for line in lines_to_write:
        f.write(line)

print('Successfully wrote to output.txt.')

# After running this code, a file named 'output.txt' will be created
# with the following content:
# 
# This is a new file.
# We are writing with the write() method.
# Newlines require \n.

write(): Append to an Existing File (Append Mode)

Using 'a' mode allows you to add new data to the end of an existing file without deleting its current content. This is useful for things like log files, where you want to accumulate data.

<!-- Python Code -->
# Append to the 'output.txt' file we just created
with open('output.txt', 'a', encoding='utf-8') as f:
    f.write('This is an appended line.\n')

print('Successfully appended to output.txt.')

# After running this code, the content of 'output.txt' will be:
# 
# This is a new file.
# We are writing with the write() method.
# Newlines require \n.
# This is an appended line.

Advanced Example: Generating an HTML File with Python

Let's apply what we've learned to an example that's relevant for web creators. Hereโ€™s a sample script that dynamically generates an HTML file. We'll create a simple profile card HTML based on data from a dictionary.

Running the following Python code will generate a file named profile.html. This is a 'complete, runnable HTML example'.

Step 1: The Python Code to Generate HTML

Save this code with a name like generate_html.py and run it.

<!-- Python Code: generate_html.py -->
# Profile data
profile_data = {
    'name': 'Taro Yamada',
    'job': 'Web Developer',
    'skills': ['HTML', 'CSS', 'JavaScript', 'Python'],
    'message': 'With Python, you can dynamically generate HTML like this!'
}

# Generate HTML for the skill list
skill_list_html = ''
for skill in profile_data['skills']:
    skill_list_html += f'          <li>{skill}</li>\n'

# The complete HTML template
html_template = f"""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Generated Profile</title>
    <style>
        body {{
            font-family: sans-serif;
            background-color: #121212;
            color: #e0e0e0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }}
        .card {{
            background-color: #1e1e1e;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
            padding: 2rem;
            width: 350px;
            border: 1px solid #5f6368;
        }}
        h1 {{
            color: #669df6;
            text-align: center;
        }}
        h2 {{
            color: #8ab4f8;
            border-bottom: 1px solid #5f6368;
            padding-bottom: 0.5rem;
        }}
        ul {{
            list-style: none;
            padding: 0;
        }}
        li {{
            background-color: #333;
            border-radius: 5px;
            padding: 0.5rem 1rem;
            margin-bottom: 0.5rem;
        }}
        p {{
            line-height: 1.6;
        }}
    </style>
</head>
<body>
    <div class="card">
        <h1>{profile_data['name']}</h1>
        <p>{profile_data['job']}</p>

        <h2>Skills</h2>
        <ul>
{skill_list_html}
        </ul>

        <h2>Message</h2>
        <p>{profile_data['message']}</p>
    </div>
</body>
</html>
"""

# Write to file
file_path = 'profile.html'
with open(file_path, 'w', encoding='utf-8') as f:
    f.write(html_template)

print(f"'{file_path}' has been generated. Open it in your browser to check.")

Step 2: The Generated HTML File (`profile.html`)

When you run the Python code above, it will create a profile.html file with the following content. Try opening this file in a web browser. You should see a nice, dark-mode-compatible profile card.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Generated Profile</title>
    <style>
        body {
            font-family: sans-serif;
            background-color: #121212;
            color: #e0e0e0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }
        .card {
            background-color: #1e1e1e;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
            padding: 2rem;
            width: 350px;
            border: 1px solid #5f6368;
        }
        h1 {
            color: #669df6;
            text-align: center;
        }
        h2 {
            color: #8ab4f8;
            border-bottom: 1px solid #5f6368;
            padding-bottom: 0.5rem;
        }
        ul {
            list-style: none;
            padding: 0;
        }
        li {
            background-color: #333;
            border-radius: 5px;
            padding: 0.5rem 1rem;
            margin-bottom: 0.5rem;
        }
        p {
            line-height: 1.6;
        }
    </style>
</head>
<body>
    <div class="card">
        <h1>Taro Yamada</h1>
        <p>Web Developer</p>

        <h2>Skills</h2>
        <ul>
          <li>HTML</li>
          <li>CSS</li>
          <li>JavaScript</li>
          <li>Python</li>

        </ul>

        <h2>Message</h2>
        <p>With Python, you can dynamically generate HTML like this!</p>
    </div>
</body>
</html>

Points to Watch Out For and Best Practices

File operations are powerful, but there are a few things to be careful about.


Summary and Next Steps

In this article, we covered the basics of reading and writing files in Python. Mastering the with open() syntax will make data persistence and integration with external data much easier.

  • The basic way to open a file is with open('filename', 'mode', encoding='utf-8') as f:
  • For reading, choose between read(), readlines(), and a for loop based on your needs.
  • For writing, use write() and distinguish between 'w' (overwrite) and 'a' (append).
  • When handling non-ASCII text, encoding='utf-8' is essential!

Once you're comfortable with file operations, the next thing to learn is error handling. Knowing how to deal with situations like a file not being found is essential for building stable programs. We encourage you to learn about it in our next article.

Mastering Exception Handling in Python (try-except)