def search(self): student_query = [] while True: id = '' name = '' if os.path.exists(self.filename): # 判断文件是否存在 mode = input('按id查找请输入1,按姓名查找请输入2\n') if mode == '1': id = input('请输入要查找的id:') elif mode == '2': name = input('请输入要查找的姓名:') else: print('您的输入有误,请重新输入') continue with open(self.filename, 'r') as rfile: allstudent = csv.DictReader(rfile) # 读取csv文件 for item in allstudent: if item['id'] == id or item['姓名'] == name: student_query.append(item) # 查询是否有对应id或姓名的学生,找到之后放到查询结果列表中 # 显示查询结果 self.show_student(student_query) answer = input('是否要继续查询?y/n\n') if answer == 'y' or answer == 'Y': # 清空列表 student_query.clear() continue else: break else: print('暂未保存该学生信息') return # 展示所有学生 def show(self): if os.path.exists(self.filename): with open(self.filename, 'r') as rfile: reader = csv.reader(rfile) # 读取csv文件 student_information = [] # 将结果转换为列表 for row in reader: student_information.append(row) if student_information != []: self.formet.output(student_information) # 调用格式化的展示函数 else: print('暂未保存学生信息')请你帮我修正错误
时间: 2024-03-02 15:49:21 浏览: 64
这段代码中似乎没有明显的错误,但是可以做一些改进和优化:
1. 在查询学生信息时,可以使用 `input` 函数的参数来限制用户输入的值,而不是用 `continue` 语句来强制用户重新输入。例如:
```
mode = input('按id查找请输入1,按姓名查找请输入2\n[1/2]: ')
while mode not in ['1', '2']:
print('您的输入有误,请重新输入')
mode = input('按id查找请输入1,按姓名查找请输入2\n[1/2]: ')
```
2. 在读取 CSV 文件时,可以使用 `csv.DictReader` 函数来读取,这样可以直接将每行数据转换为字典格式,方便查询和处理。
3. 在展示学生信息时,可以使用 `csv.reader` 函数的 `DictReader` 类来读取,这样可以直接将每行数据转换为字典格式,方便展示和处理。
4. 可以添加一些异常处理机制,例如文件不存在或者读取错误时,给出提示和处理方法。
下面是修改后的代码:
```
import csv
import os
class Student:
def __init__(self, filename, formet):
self.filename = filename
self.formet = formet
def search(self):
student_query = []
while True:
id = ''
name = ''
if not os.path.exists(self.filename):
print('暂未保存该学生信息')
return
mode = input('按id查找请输入1,按姓名查找请输入2\n[1/2]: ')
while mode not in ['1', '2']:
print('您的输入有误,请重新输入')
mode = input('按id查找请输入1,按姓名查找请输入2\n[1/2]: ')
if mode == '1':
id = input('请输入要查找的id:')
elif mode == '2':
name = input('请输入要查找的姓名:')
with open(self.filename, 'r') as rfile:
allstudent = csv.DictReader(rfile)
for item in allstudent:
if item['id'] == id or item['姓名'] == name:
student_query.append(item)
if student_query:
self.show_student(student_query)
else:
print('未找到符合条件的学生信息')
answer = input('是否要继续查询?[y/n]: ')
if answer.lower() != 'y':
break
student_query.clear()
def show(self):
if not os.path.exists(self.filename):
print('暂未保存学生信息')
return
with open(self.filename, 'r') as rfile:
reader = csv.DictReader(rfile)
student_information = []
for row in reader:
student_information.append(row)
if student_information:
self.formet.output(student_information)
else:
print('暂未保存学生信息')
def show_student(self, students):
headers = ['id', '姓名', '性别', '年龄', '成绩']
student_information = [headers]
for student in students:
row = [student[h] for h in headers]
student_information.append(row)
self.formet.output(student_information)
class Formet:
def output(self, student_information):
for row in student_information:
print('\t'.join(row))
filename = 'students.csv'
student = Student(filename, Formet())
student.search()
```
阅读全文