📝 第6天:文件操作练习 - 魔法书管理实战
🎉 欢迎回来!今天我们探索了Python的文件操作魔法,这些技能可以帮助我们将魔法咒语和知识永久保存下来。现在让我们通过一些有趣的练习来巩固这些知识吧!
🎯 练习目标
通过今天的练习,你将能够:
- 熟练掌握文件的打开、读取和关闭操作
- 学会使用不同的文件打开模式
- 掌握文件写入和追加操作
- 能够处理CSV和JSON等常见文件格式
- 学会使用异常处理来解决文件操作中可能遇到的问题
- 运用文件操作知识解决实际问题
🏋️♂️ 基础练习
练习1:读取文本文件
任务:创建一个文本文件poem.txt,然后编写一个程序来读取并显示这个文件的内容。
要求:
- 首先创建一个文本文件
poem.txt,并写入一首你喜欢的诗或一段文字 - 编写一个Python程序,读取
poem.txt的内容并打印到屏幕上 - 使用
with语句来自动管理文件资源
提示:使用open()函数的r模式打开文件,然后使用read()或readlines()方法读取内容。
示例输出:
《静夜思》
床前明月光,疑是地上霜。
举头望明月,低头思故乡。练习2:写入文本文件
任务:编写一个程序,将用户输入的内容保存到文本文件中。
要求:
- 提示用户输入文件名和要写入的内容
- 将用户输入的内容写入指定的文件
- 写入完成后,提示用户写入成功
提示:使用open()函数的w模式打开文件,然后使用write()方法写入内容。
示例输出:
请输入文件名:notes.txt
请输入要写入的内容(输入exit结束):
这是我的笔记。
今天学习了文件操作。
exit
内容已成功写入notes.txt文件。练习3:文件追加操作
任务:编写一个程序,向已有的文件中追加新的内容。
要求:
- 使用上一个练习创建的
notes.txt文件 - 向文件中追加新的笔记内容
- 追加完成后,读取并显示文件的全部内容
提示:使用open()函数的a模式打开文件进行追加操作。
示例输出:
请输入要追加的内容:
这是追加的新笔记。
文件内容已追加。
文件的全部内容:
这是我的笔记。
今天学习了文件操作。
这是追加的新笔记。练习4:文件复制工具
任务:编写一个程序,实现文件复制功能。
要求:
- 提示用户输入源文件路径和目标文件路径
- 将源文件的内容复制到目标文件
- 复制完成后,提示用户复制成功
- 处理可能出现的异常,如文件不存在、权限错误等
提示:使用rb和wb模式以二进制方式读取和写入文件,这样可以复制任何类型的文件。
示例输出:
请输入源文件路径:source.txt
请输入目标文件路径:copy.txt
文件复制成功!练习5:统计文件行数
任务:编写一个程序,统计文本文件的行数。
要求:
- 提示用户输入一个文本文件的路径
- 统计并显示文件的行数
- 处理可能出现的异常
提示:可以使用readlines()方法读取所有行,然后使用len()函数获取行数。或者,也可以逐行读取文件并计数。
示例输出:
请输入文件路径:poem.txt
文件共有 4 行。🚀 挑战练习
挑战1:文件内容搜索器
任务:编写一个程序,在文本文件中搜索指定的关键词,并显示包含该关键词的所有行。
要求:
- 提示用户输入文件路径和要搜索的关键词
- 搜索文件中包含该关键词的所有行
- 显示找到的行数和具体内容
- 忽略关键词的大小写
- 处理可能出现的异常
示例输出:
请输入文件路径:story.txt
请输入要搜索的关键词:adventure
共找到 3 行包含关键词 "adventure" 的内容:
1. 这是一个关于冒险(adventure)的故事。
2. 他们踏上了冒险(adventure)之旅。
3. 这次冒险(adventure)改变了他们的生活。挑战2:CSV文件处理
任务:编写一个程序,处理CSV文件中的数据。
要求:
- 创建一个包含学生信息的CSV文件
students.csv,至少包含姓名、年龄、成绩三个字段 - 编写一个程序,读取
students.csv文件的内容 - 计算学生的平均成绩
- 将结果写入一个新的CSV文件
result.csv - 使用
csv模块来处理CSV文件
示例输出:
CSV文件读取成功。
学生平均成绩:85.5
结果已写入result.csv文件。挑战3:JSON文件处理
任务:编写一个程序,处理JSON文件中的数据。
要求:
- 创建一个包含用户信息的JSON文件
users.json,至少包含3个用户的信息,每个用户信息包括姓名、年龄、爱好等字段 - 编写一个程序,读取
users.json文件的内容 - 找出年龄最大的用户和爱好最多的用户
- 将结果写入一个新的JSON文件
analysis.json - 使用
json模块来处理JSON文件
示例输出:
JSON文件读取成功。
年龄最大的用户:张三(30岁)
爱好最多的用户:李四(5个爱好)
结果已写入analysis.json文件。挑战4:文件批量重命名
任务:编写一个程序,批量重命名指定目录下的文件。
要求:
- 提示用户输入目标目录路径和新的文件名前缀
- 获取该目录下的所有文件
- 按照一定的规则(如添加前缀和序号)批量重命名文件
- 显示重命名前后的文件名对比
- 处理可能出现的异常,如目录不存在、权限错误等
示例输出:
请输入目标目录路径:./photos
请输入文件名前缀:vacation_
文件批量重命名开始...
DSC_001.jpg -> vacation_001.jpg
DSC_002.jpg -> vacation_002.jpg
DSC_003.jpg -> vacation_003.jpg
3个文件重命名成功!💡 参考答案
练习1参考答案
# 创建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参考答案
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参考答案
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参考答案
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参考答案
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程序员!👍




