🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

自如地操作Python文件!从基础读写到高级应用的全方位指南

要在电脑上通过命令提示符或 PowerShell 运行 Python,需要先下载并安装 Python。
如果你还没有安装,请参考Python安装与开发环境配置一文来完成安装。

在编程时,你总会遇到需要“将程序结果保存到文件”或“从外部文本文件读取数据”的场景。使用Python,这些文件操作可以轻松得令人惊讶。本文专为Web开发者准备,将通过可直接复制粘贴运行的代码,从零开始,深入浅出地讲解文件读写(I/O)的基础知识和高级应用!

读完本文,你将能自信地使用Python处理文件。让我们开始体验“让代码跑起来”的乐趣吧!🚀


文件操作的第一步:`open()`函数与`with`语句

在Python中处理文件,首先要使用内置的open()函数打开目标文件。而在文件操作中,有一个必须掌握的关键就是with语句。使用with语句打开文件,它能确保在处理完毕后自动关闭文件,从而防止忘记关闭文件。这可以说是Python的一种“标准做法”,所以请务必配套学习。

open()函数主要需要两个信息:

最基本的三种模式如下:

此外,在处理包含中文字符等多字节字符的文本时,通常建议指定encoding='utf-8'以防止乱码。那么,让我们来看一些实际的例子吧!


读取文件:将数据导入Python

首先,我们来看看如何读取文本文件的内容。我们假设在Python脚本所在的同一目录下,有一个名为sample.txt的文件,其内容如下。

你好, Python!
这是一个示例文本文件。
让我们来学习文件操作吧。

read(): 一次性读取整个文件

使用read()方法可以获取文件的全部内容,并将其作为一个大的字符串返回。这个方法非常适合小文件。

<!-- Python 代码 -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        content = f.read()
        print(content)
except FileNotFoundError:
    print('错误:找不到 sample.txt 文件。')

<!-- 预期输出 -->
# 你好, Python!
# 这是一个示例文本文件。
# 让我们来学习文件操作吧。

readlines(): 按行读取为列表

readlines()方法会返回一个列表,其中每个元素是文件的一行。请注意,每个元素的末尾都会包含换行符(\n)。

<!-- Python 代码 -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        print(lines)
except FileNotFoundError:
    print('错误:找不到 sample.txt 文件。')

<!-- 预期输出 -->
# ['你好, Python!\n', '这是一个示例文本文件。\n', '让我们来学习文件操作吧。\n']

`for`循环:高效读取大文件

如果文件非常大,使用read()readlines()一次性将所有内容读入内存是低效的。在这种情况下,最佳实践是使用for循环逐行处理文件。这是最节省内存的方法。

<!-- Python 代码 -->
try:
    with open('sample.txt', 'r', encoding='utf-8') as f:
        for line in f:
            # print()会自动换行,因此我们删除原始的换行符
            print(line.strip())
except FileNotFoundError:
    print('错误:找不到 sample.txt 文件。')

<!-- 预期输出 -->
# 你好, Python!
# 这是一个示例文本文件。
# 让我们来学习文件操作吧。

写入文件:从Python保存数据

接下来,让我们看看如何将Python生成的数据写入文件。请注意'w'(覆盖)模式和'a'(追加)模式之间的区别。

write(): 写入新文件(覆盖模式)

当以'w'模式打开文件时,如果文件不存在,则会创建一个新文件;如果文件已存在,其内容将被清空并重置。我们使用write()方法来写入字符串。

注意:write()不会自动添加换行符。如果想换行,必须在字符串末尾手动添加换行符\n

<!-- Python 代码 -->
# 要写入的内容列表
lines_to_write = [
    '这是一个新文件。\n',
    '我们正在用 write() 方法写入。\n',
    '换行需要使用 \\n。\n'
]

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

print('已成功写入到 output.txt。')

# 运行此代码后,将创建一个名为 'output.txt' 的文件,
# 其内容如下:
# 
# 这是一个新文件。
# 我们正在用 write() 方法写入。
# 换行需要使用 \n。

write(): 追加到现有文件(追加模式)

使用'a'模式可以在不删除现有内容的情况下,将新数据添加到文件末尾。这对于像日志文件这样需要累积数据的场景非常有用。

<!-- Python 代码 -->
# 追加到我们刚刚创建的 'output.txt' 文件中
with open('output.txt', 'a', encoding='utf-8') as f:
    f.write('这是追加的一行。\n')

print('已成功追加到 output.txt。')

# 运行此代码后,'output.txt' 的内容将变为:
# 
# 这是一个新文件。
# 我们正在用 write() 方法写入。
# 换行需要使用 \n。
# 这是追加的一行。

高级示例:使用Python生成HTML文件

让我们将所学知识应用到一个与Web开发者相关的实例中。这是一个使用Python脚本动态生成HTML文件的示例。我们将根据字典中的数据创建一个简单的个人资料卡片HTML。

运行下面的Python代码将生成一个名为profile.html的文件。这是一个“完整且可运行的HTML示例”。

步骤1:生成HTML的Python代码

将此代码保存为generate_html.py等文件名并运行它。

<!-- Python 代码: generate_html.py -->
# 个人资料数据
profile_data = {
    'name': '张三',
    'job': 'Web开发者',
    'skills': ['HTML', 'CSS', 'JavaScript', 'Python'],
    'message': '使用Python,你可以像这样动态生成HTML!'
}

# 为技能列表生成HTML
skill_list_html = ''
for skill in profile_data['skills']:
    skill_list_html += f'          <li>{skill}</li>\n'

# 完整的HTML模板
html_template = f"""
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>生成的个人资料</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>技能</h2>
        <ul>
{skill_list_html}
        </ul>

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

# 写入文件
file_path = 'profile.html'
with open(file_path, 'w', encoding='utf-8') as f:
    f.write(html_template)

print(f"'{file_path}' 已生成。请在浏览器中打开查看。")

步骤2:生成的HTML文件 (`profile.html`)

当你运行上面的Python代码时,它会创建一个包含以下内容的profile.html文件。请尝试在Web浏览器中打开此文件。你应该会看到一个漂亮的、兼容暗黑模式的个人资料卡片。

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>生成的个人资料</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>张三</h1>
        <p>Web开发者</p>

        <h2>技能</h2>
        <ul>
          <li>HTML</li>
          <li>CSS</li>
          <li>JavaScript</li>
          <li>Python</li>

        </ul>

        <h2>留言</h2>
        <p>使用Python,你可以像这样动态生成HTML!</p>
    </div>
</body>
</html>

注意事项与最佳实践

文件操作功能强大,但有几点需要注意。


总结与后续步骤

在本文中,我们学习了Python中读写文件的基础知识。掌握with open()语法将使数据持久化和与外部数据集成变得更加容易。

  • 打开文件的基本方法是 with open('文件名', '模式', encoding='utf-8') as f:
  • 读取时,根据需要选择使用 read()readlines()for 循环。
  • 写入时,使用 write() 并区分 'w' (覆盖) 和 'a' (追加)。
  • 处理非ASCII文本时,encoding='utf-8' 是必不可少的!

当你熟悉了文件操作后,接下来应该学习的是错误处理。知道如何处理像文件未找到这样的情况,对于构建稳定的程序至关重要。我们鼓励你在我们的下一篇文章中学习相关知识。

掌握Python的异常处理(try-except)