Skip to content

📝 第6天:文件操作练习 - 魔法书管理实战

🎉 欢迎回来!今天我们探索了Python的文件操作魔法,这些技能可以帮助我们将魔法咒语和知识永久保存下来。现在让我们通过一些有趣的练习来巩固这些知识吧!

🎯 练习目标

通过今天的练习,你将能够:

  • 熟练掌握文件的打开、读取和关闭操作
  • 学会使用不同的文件打开模式
  • 掌握文件写入和追加操作
  • 能够处理CSV和JSON等常见文件格式
  • 学会使用异常处理来解决文件操作中可能遇到的问题
  • 运用文件操作知识解决实际问题

🏋️‍♂️ 基础练习

练习1:读取文本文件

任务:创建一个文本文件poem.txt,然后编写一个程序来读取并显示这个文件的内容。

要求

  1. 首先创建一个文本文件poem.txt,并写入一首你喜欢的诗或一段文字
  2. 编写一个Python程序,读取poem.txt的内容并打印到屏幕上
  3. 使用with语句来自动管理文件资源

提示:使用open()函数的r模式打开文件,然后使用read()readlines()方法读取内容。

示例输出

《静夜思》
床前明月光,疑是地上霜。
举头望明月,低头思故乡。

练习2:写入文本文件

任务:编写一个程序,将用户输入的内容保存到文本文件中。

要求

  1. 提示用户输入文件名和要写入的内容
  2. 将用户输入的内容写入指定的文件
  3. 写入完成后,提示用户写入成功

提示:使用open()函数的w模式打开文件,然后使用write()方法写入内容。

示例输出

请输入文件名:notes.txt
请输入要写入的内容(输入exit结束):
这是我的笔记。
今天学习了文件操作。
exit
内容已成功写入notes.txt文件。

练习3:文件追加操作

任务:编写一个程序,向已有的文件中追加新的内容。

要求

  1. 使用上一个练习创建的notes.txt文件
  2. 向文件中追加新的笔记内容
  3. 追加完成后,读取并显示文件的全部内容

提示:使用open()函数的a模式打开文件进行追加操作。

示例输出

请输入要追加的内容:
这是追加的新笔记。
文件内容已追加。

文件的全部内容:
这是我的笔记。
今天学习了文件操作。
这是追加的新笔记。

练习4:文件复制工具

任务:编写一个程序,实现文件复制功能。

要求

  1. 提示用户输入源文件路径和目标文件路径
  2. 将源文件的内容复制到目标文件
  3. 复制完成后,提示用户复制成功
  4. 处理可能出现的异常,如文件不存在、权限错误等

提示:使用rbwb模式以二进制方式读取和写入文件,这样可以复制任何类型的文件。

示例输出

请输入源文件路径:source.txt
请输入目标文件路径:copy.txt
文件复制成功!

练习5:统计文件行数

任务:编写一个程序,统计文本文件的行数。

要求

  1. 提示用户输入一个文本文件的路径
  2. 统计并显示文件的行数
  3. 处理可能出现的异常

提示:可以使用readlines()方法读取所有行,然后使用len()函数获取行数。或者,也可以逐行读取文件并计数。

示例输出

请输入文件路径:poem.txt
文件共有 4 行。

🚀 挑战练习

挑战1:文件内容搜索器

任务:编写一个程序,在文本文件中搜索指定的关键词,并显示包含该关键词的所有行。

要求

  1. 提示用户输入文件路径和要搜索的关键词
  2. 搜索文件中包含该关键词的所有行
  3. 显示找到的行数和具体内容
  4. 忽略关键词的大小写
  5. 处理可能出现的异常

示例输出

请输入文件路径:story.txt
请输入要搜索的关键词:adventure
共找到 3 行包含关键词 "adventure" 的内容:
1. 这是一个关于冒险(adventure)的故事。
2. 他们踏上了冒险(adventure)之旅。
3. 这次冒险(adventure)改变了他们的生活。

挑战2:CSV文件处理

任务:编写一个程序,处理CSV文件中的数据。

要求

  1. 创建一个包含学生信息的CSV文件students.csv,至少包含姓名、年龄、成绩三个字段
  2. 编写一个程序,读取students.csv文件的内容
  3. 计算学生的平均成绩
  4. 将结果写入一个新的CSV文件result.csv
  5. 使用csv模块来处理CSV文件

示例输出

CSV文件读取成功。
学生平均成绩:85.5
结果已写入result.csv文件。

挑战3:JSON文件处理

任务:编写一个程序,处理JSON文件中的数据。

要求

  1. 创建一个包含用户信息的JSON文件users.json,至少包含3个用户的信息,每个用户信息包括姓名、年龄、爱好等字段
  2. 编写一个程序,读取users.json文件的内容
  3. 找出年龄最大的用户和爱好最多的用户
  4. 将结果写入一个新的JSON文件analysis.json
  5. 使用json模块来处理JSON文件

示例输出

JSON文件读取成功。
年龄最大的用户:张三(30岁)
爱好最多的用户:李四(5个爱好)
结果已写入analysis.json文件。

挑战4:文件批量重命名

任务:编写一个程序,批量重命名指定目录下的文件。

要求

  1. 提示用户输入目标目录路径和新的文件名前缀
  2. 获取该目录下的所有文件
  3. 按照一定的规则(如添加前缀和序号)批量重命名文件
  4. 显示重命名前后的文件名对比
  5. 处理可能出现的异常,如目录不存在、权限错误等

示例输出

请输入目标目录路径:./photos
请输入文件名前缀:vacation_
文件批量重命名开始...
DSC_001.jpg -> vacation_001.jpg
DSC_002.jpg -> vacation_002.jpg
DSC_003.jpg -> vacation_003.jpg
3个文件重命名成功!

💡 参考答案

练习1参考答案

python
# 创建poem.txt文件(实际应用中,这个文件可能已经存在)
with open("poem.txt", "w", encoding="utf-8") as file:
    file.write("《静夜思》\n")
    file.write("床前明月光,疑是地上霜。\n")
    file.write("举头望明月,低头思故乡。\n")

# 读取并显示文件内容
with open("poem.txt", "r", encoding="utf-8") as file:
    content = file.read()
    print(content)

练习2参考答案

python
filename = input("请输入文件名:")
print("请输入要写入的内容(输入exit结束):")

lines = []
while True:
    line = input()
    if line == "exit":
        break
    lines.append(line)

# 将列表中的内容合并为一个字符串,每行之间添加换行符
content = "\n".join(lines)

with open(filename, "w", encoding="utf-8") as file:
    file.write(content)

print(f"内容已成功写入{filename}文件。")

练习3参考答案

python
filename = "notes.txt"

# 检查文件是否存在
import os
if not os.path.exists(filename):
    # 如果文件不存在,先创建文件
    with open(filename, "w", encoding="utf-8") as file:
        file.write("这是我的笔记。\n")
        file.write("今天学习了文件操作。\n")

print("请输入要追加的内容:")
additional_content = input()

with open(filename, "a", encoding="utf-8") as file:
    file.write("\n" + additional_content)

print("文件内容已追加。")
print("\n文件的全部内容:")

with open(filename, "r", encoding="utf-8") as file:
    content = file.read()
    print(content)

挑战1参考答案

python
def search_in_file(file_path, keyword):
    try:
        # 打开文件并读取所有行
        with open(file_path, "r", encoding="utf-8") as file:
            lines = file.readlines()
        
        # 搜索包含关键词的行
        results = []
        for i, line in enumerate(lines):
            if keyword.lower() in line.lower():
                # 保存行号和内容
                results.append((i + 1, line.strip()))
        
        # 显示结果
        if results:
            print(f"共找到 {len(results)} 行包含关键词 \"{keyword}\" 的内容:")
            for line_num, content in results:
                print(f"{line_num}. {content}")
        else:
            print(f"未找到包含关键词 \"{keyword}\" 的内容。")
            
    except FileNotFoundError:
        print(f"错误:找不到文件 '{file_path}'")
    except PermissionError:
        print(f"错误:没有权限访问文件 '{file_path}'")
    except Exception as e:
        print(f"发生错误:{e}")

# 获取用户输入
file_path = input("请输入文件路径:")
keyword = input("请输入要搜索的关键词:")

# 调用函数进行搜索
search_in_file(file_path, keyword)

挑战2参考答案

python
import csv

# 创建示例CSV文件(实际应用中,这个文件可能已经存在)
with open("students.csv", "w", encoding="utf-8", newline="") as file:
    writer = csv.writer(file)
    writer.writerow(["姓名", "年龄", "成绩"])
    writer.writerow(["张三", 18, 85])
    writer.writerow(["李四", 19, 92])
    writer.writerow(["王五", 20, 78])
    writer.writerow(["赵六", 19, 90])

# 读取CSV文件并计算平均成绩
total_score = 0
count = 0

with open("students.csv", "r", encoding="utf-8", newline="") as file:
    reader = csv.reader(file)
    header = next(reader)  # 跳过表头
    
    for row in reader:
        score = float(row[2])  # 将成绩转换为浮点数
        total_score += score
        count += 1

# 计算平均成绩
average_score = total_score / count if count > 0 else 0

print(f"CSV文件读取成功。")
print(f"学生平均成绩:{average_score:.1f}")

# 将结果写入新的CSV文件
with open("result.csv", "w", encoding="utf-8", newline="") as file:
    writer = csv.writer(file)
    writer.writerow(["统计项目", "数值"])
    writer.writerow(["学生总数", count])
    writer.writerow(["平均成绩", average_score])

print(f"结果已写入result.csv文件。")

🎊 完成挑战!

恭喜你完成了今天的所有练习!通过这些练习,你已经掌握了Python文件操作的基本技能。在实际编程中,文件操作是一项非常重要的技能,能够帮助你处理各种数据存储和读取的任务。

如果你在练习过程中遇到了问题,或者有任何疑问,欢迎随时提问。继续保持,你正在成为一名优秀的Python程序员!👍

© 2025 技术博客. All rights reserved by 老周有AI