# ===================== 步骤1:写入文本到文件(文本模式) =====================
# 文本模式(w):写入字符串,必须指定encoding(避免中文乱码)
with open("./b.txt", mode="w", encoding="utf-8") as f:
# 待写入的字符串(换行拼接,避免单行过长)
write_str = "Nothing in the world is difficult " \
"for one who sets his mind to it."
# 写入文件并获取写入的字符数
write_size = f.write(write_str)
print(f"成功写入 {write_size} 个字符") # 输出:成功写入 60 个字符
# ===================== 步骤2:读取文件+操作文件指针(文本模式) =====================
# 文本模式(r):读取字符串,指定encoding与写入时一致
with open("./b.txt", mode="r", encoding="utf-8") as f:
# 1. 获取初始指针位置(文本模式初始为0,文件开头)
init_pos = f.tell()
print(f"初始文件指针位置:{init_pos}") # 输出:初始文件指针位置:0
# 2. 从当前位置读取2个字符
read_2_char = f.read(2)
print(f"读取的2个字符:{read_2_char}") # 输出:读取的2个字符:No
# 3. 文本模式下seek仅支持基准位置0(文件开头),调整指针到第7位
# 错误提醒:文本模式下用seek(5,1)会报错,二进制模式才支持基准1/2
target_pos = 7
f.seek(target_pos, 0) # 基准0:从文件开头偏移7个字符
current_pos = f.tell()
print(f"调整后指针位置:{current_pos}") # 输出:调整后指针位置:7
# 4. 读取指针位置后的剩余内容
remain_content = f.read()
print(f"指针位置{current_pos}后的内容:{remain_content}")
# 输出:指针位置7后的内容:ing in the world is difficult for one who sets his mind to it.
# ===================== 步骤3:二进制模式操作文件(适配seek基准1/2) =====================
# 二进制模式(rb):操作字节流,禁止指定encoding参数
with open("./b.txt", mode="rb") as f:
# 1. 读取2个字节(对应文本模式的2个字符,英文1字符=1字节)
read_2_byte = f.read(2)
print(f"二进制读取2个字节:{read_2_byte}") # 输出:二进制读取2个字节:b'No'
# 2. 二进制模式支持seek基准1(当前位置),向后偏移5个字节
f.seek(5, 1) # 当前位置是2 → 偏移后位置=2+5=7
binary_pos = f.tell()
print(f"二进制seek后指针位置:{binary_pos}") # 输出:二进制seek后指针位置:7
# 3. 字节流解码为字符串(需指定编码,与写入时一致)
binary_content = f.read().decode("utf-8")
print(f"二进制读取并解码后的内容:{binary_content}")
# 输出:二进制读取并解码后的内容:ing in the world is difficult for one who sets his mind to it.
csv_file = open('iris.csv')
lines = []
for line in csv_file:
line = line.replace('\n',"")
lines.append(line.split(','))
print(lines)
csv_file.close()
学生管理系统,保存到text文件 新增load_students函数:程序启动时,从student.txt读取数据到students列表; 新增save_students函数:将students列表以 JSON 格式写入student.txt(JSON 格式易读且支持字典 / 列表); 操作后自动保存:在add_student、update_student、delete_student函数中,执行完操作后调用save_students,确保数据实时保存; 退出时再保存:退出系统(选项 6)时额外调用一次save_students,防止数据遗漏。
import json # 用JSON格式保存数据(易读且方便解析)
students = []
FILE_PATH = "student.txt" # 保存数据的文件
# 1. 加载本地文件中的学生数据(程序启动时执行)
def load_students():
"""从student.txt加载学生数据到students列表"""
global students
try:
with open(FILE_PATH, "r", encoding="utf-8") as f:
# 读取文件内容并转换为列表(JSON格式)
students = json.load(f)
print("已加载本地学生数据")
except FileNotFoundError:
# 文件不存在则创建空列表
students = []
print("本地无学生数据,已初始化空列表")
# 2. 保存students列表到student.txt文件
def save_students():
"""将students列表保存到student.txt"""
with open(FILE_PATH, "w", encoding="utf-8") as f:
# 把列表转换为JSON字符串写入文件
json.dump(students, f, ensure_ascii=False, indent=2)
print("学生数据已保存到本地")
# 3. 原菜单显示函数
def show_menu():
"""显示学生管理系统菜单"""
print("--------------------------------------")
print("|1. 添加学生信息")
print("|2. 查询学生信息")
print("|3. 查询学生总数")
print("|4. 删除学生信息")
print("|5. 修改学生信息")
print("|6. 退出系统")
print("--------------------------------------")
# 4. 添加学生(添加后自动保存)
def add_student():
"""添加"""
name = input("输入学生姓名:")
age = input("输入学生年龄:")
grade = input("输入学生成绩:")
student_id = int(input("输入学生ID:"))
if student_id is None:
student_id = len(students) + 1001
student = {
"name": name,
"age": age,
"grade": grade,
"id": student_id
}
students.append(student)
print(f"成功添加学生:{name}(id:{student_id})")
save_students() # 新增:添加后保存数据
# 5. 查询学生
def find_student(student_id):
"""查询"""
for student in students:
if student["id"] == student_id:
print(student)
return student
return None
# 6. 查询学生总数
def count_student():
"""返回学生总数"""
print(f"学生总数:{len(students)}")
return len(students)
# 7. 获取用户选择
def get_select():
choice = int(input("请输入您的选择:"))
return choice
# 8. 修改学生(修改后自动保存)
def update_student():
"""修改学生信息"""
student_id = int(input("输入要查询学生ID:"))
student = find_student(student_id)
if student:
print("请输入新信息(回车不修改姓名)")
new_name = input(f"姓名[{student['name']}]:") or student["name"]
new_age = input(f"年龄[{student['age']}]:")
new_grade = input(f"成绩[{student['grade']}]:")
student["name"] = new_name
if new_age:
student["age"] = new_age
if new_grade:
student["grade"] = new_grade
print(student)
save_students() # 新增:修改后保存数据
else:
print("没有学生信息")
# 9. 删除学生(删除后自动保存)
def delete_student():
"""删除学生信息"""
student_id = int(input("输入要删除学生ID:"))
for i, student in enumerate(students):
if student["id"] == student_id:
delete_name = student["name"]
students.pop(i)
print(f"已删除学生:{delete_name}")
save_students() # 新增:删除后保存数据
return
print("未找到该学生")
# 程序启动时先加载本地数据
load_students()
# 主循环
while True:
show_menu()
num = get_select()
if num == 1:
add_student()
elif num == 2:
student_id = int(input("输入要查询学生ID:"))
find_student(student_id)
elif num == 3:
count_student()
elif num == 4:
delete_student()
elif num == 5:
update_student()
elif num == 6:
print("谢谢使用本系统")
save_students() # 退出时再保存一次(确保数据不丢失)
break
else:
print("输入有误,重新输入1-6的数字")
效果: