项目打包生成可执行的exe文件过程中遇到【pyinstaller不是内部或外部命令】的问题,最后从如下文章中找到解决办法
项目较为简单300多行代码,实现的是文字界面化效果。编写过程感觉跟用c写有一些不同,某些地方实现比c更为灵活,代码也更直观可读。今后继续学习python内容,目前研究生研究方向大概是水利方面的知识图谱构建,加油!
代码:
import os.path filename = 'student.txt' def save(lst): try: stu_txt = open(filename, 'a', encoding='utf-8') except: stu_txt = open(filename, 'w', encoding='UTF-8') for item in lst: stu_txt.write(str(item) + '\n') stu_txt.close() def insert(): # 存储到磁盘中 student_list = [] while True: id = input('请输入学号') if not id: # 通过input输入的类型是字符串,判断为True,所以not id 就是false break # 为空或不是数字 name = input('请输入姓名') if not name: break try: englist = int(input('请输入英语成绩')) python = int(input('请输入python成绩')) java = int(input('请输入java成绩')) except: # 异常处理 print('输入无效,不是整数类型,请重新输入') continue # 将输入的信息保存到字典当中 student = {'id': id, 'name': name, 'englist': englist, 'python': python, 'java': java} student_list.append(student) answer = input('是否继续添加?y/n\n') if answer == 'y': continue else: break # 调用save函数,保存到文件上面 save(student_list) print('学生信息成功保存到文件') def menu(): print('====================学生信息管理系统==================') print('-----------------------功能菜单---------------------') print('\t\t\t\t\t1.录入学生信息') print('\t\t\t\t\t2.查找学生信息') print('\t\t\t\t\t3.删除学生信息') print('\t\t\t\t\t4.修改学生信息') print('\t\t\t\t\t5.排序') print('\t\t\t\t\t6.统计学生总人数') print('\t\t\t\t\t7.显示所有同学信息') print('\t\t\t\t\t0.退出') print('-----------------------功能菜单---------------------') def show_student(lst): # lst表示未知数,要用这个函数传入一个变量,这个变量在show_student中会用到。 if len(lst) == 0: print('没有查询到学生信息,无数据显示') return # 定义标题的显示格式 format_title = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}' # ^表示居中 <和> 同理 print(format_title.format('ID', '姓名', '英语成绩', 'python成绩', 'java成绩', '总成绩')) # 定义内容显示格式 format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}' for item in lst: print(format_data.format(item.get('id'), item.get('name'), item.get('englist'), item.get('python'), item.get('java'), int(item.get('englist')) + int(item.get('python')) + int(item.get('java')) )) def search(): student_query = [] while True: id = '' name = '' if os.path.exists(filename): choice = input('请选择查询方式 1:学号/2:姓名') # 输入的是一个字符串类型,下面数字要加引号 if choice == '1': id = input('请输入要查询的学生学号') elif choice == '2': name = input('请输入要查询的学生姓名') else: print('输入错误') search() with open(filename, 'r', encoding='utf-8') as rfile: student = rfile.readlines() for item in student: d = dict(eval(item)) # 字符串转为字典类型 if id != '': # 原本设置id和name都为空,判断哪个不为空,就用哪个查询 if d['id'] == id: student_query.append(d) # 将查询到的信息导入列表 elif name != '': if d['name'] == name: student_query.append(d) # 将查询到的信息导入列表 # 显示查询结果 show_student(student_query) # 清空列表 student_query.clear() answer = input('是否要继续查询?y/n') if answer == 'y': continue else: break else: print('原文件为空') return def delete(): while True: student_id = input('请输入你要删除学生的学号') # 为什么转换成int类型就不行了?通过input输入的是字符串类型,转为int类型应该无法匹配 if student_id != '': if os.path.exists(filename): with open(filename, 'r', encoding='utf-8') as file: student_old = file.readlines() else: student_old = [] flag = False # 标记是否删除 if student_old: with open(filename, 'w', encoding='utf-8') as wfile: d = {} for item in student_old: d = dict(eval(item)) # 将字符串转换成字典 if d['id'] != student_id: # 跟要删除的学号比对,不同再写入原文件(逐个遍历) wfile.write(str(d) + '\n') else: flag = True # 未删除 if flag: print(f'id为{student_id}的学生信息已经被删除') # 格式化字符串 else: print(f'没有找到id为{student_id}的学生信息') else: print('无学生信息') break else: answer = input('学号输入为空,是否要重新输入学号?y/n') if answer == 'y': continue else: break show() answer = input('是否继续删除学生?y/n') if answer == 'y': continue else: break def modify(): show() if os.path.exists(filename): # 如果文件存在 with open(filename, 'r', encoding='utf-8') as rfile: # 打开源文件 student_old = rfile.readlines() # 包含所有元素的列表 else: return student_id = input('请输入你要修改的学生学号:') with open(filename, 'w', encoding='utf-8') as wfile: # 创建文件 for item in student_old: d = dict(eval(item)) if d['id'] == student_id: # 找到了学生 print('找到学生信息,可以修改') while True: try: d['name'] = input('请输入姓名') d['englist'] = int(input('请输入英语成绩')) d['python'] = int(input('请输入python成绩')) d['java'] = int(input('请输入java成绩')) except: print('输入有误,请重新输入') else: break wfile.write(str(d) + '\n') print('修改成功') else: # 没找到学生 print('没找到学生') wfile.write(str(d) + '\n') answer = input('是否继续修改其他学生的信息?y/n\n') if answer == 'y': modify() def sort(): show() student_query=[] if os.path.exists(filename): with open(filename, 'r', encoding='utf-8') as rfile: student = rfile.readlines() for item in student: d = dict(eval(item)) student_query.append(d) choice = int(input('请输入你要排序的方式:0:升序/1:降序')) if choice == 0: flag = False # 标记是否删除 elif choice == 1: flag = True mode=int(input('请输入你需要排序的规则1:按英语成绩/2:按python成绩/3.按java成绩/4.按总成绩')) if mode==1: student_query.sort(key=lambda x:int(x['englist']),reverse=flag) # lambda函数用于定义表达式 elif mode==2: student_query.sort(key=lambda x:int(x['python']),reverse=flag) elif mode==3: student_query.sort(key=lambda x:int(x['java']),reverse=flag) elif mode==4: student_query.sort(key=lambda x:int(x['java'])+int(x['python'])+int(x['java']),reverse=flag) else: print('您输入有误') sort() show_student(student_query) # elif choice and acdsort == 1: # 两个都是1才实现 # print('即将为你按照成绩降序方式排序') # student_query.sort('python') # show_student(student_query) # elif choice == '0' and choice == '1': # print('即将为你按照成绩升序方式排序') # pass # elif choice == '1' and choice == '0': # print('即将为你按照成绩升序方式排序') # pass else : print('文件为空') def total(): if os.path.exists(filename): with open(filename, 'r', encoding='utf-8') as rfile: student = rfile.readlines() if student: studentsum = len(student) print('总人数为{}'.format(studentsum)) else: print('还未录入学生信息') else: print('文件为空') def show(): student_query = [] if os.path.exists(filename): with open(filename,'r',encoding='utf-8') as rfile: student=rfile.readlines() for item in student: d = dict(eval(item)) student_query.append(d) if student_query: show_student(student_query) else: print('文件为空,无法显示') def main(): while True: menu() choice = int(input('请选择')) if choice in [0, 1, 2, 3, 4, 5, 6, 7]: if choice == 0: break # 方便快速退出 # answer = input('你确定要退出吗?y/n') # if answer == 'y' or answer == 'Y': # print('谢谢您的使用!') # break # 结束循环,退出系统 # else: # continue elif choice == 1: insert() # 录入学生信息 elif choice == 2: search() # 查找学生信息 elif choice == 3: delete() # 删除学生信息 elif choice == 4: modify() # 修改学生信息 elif choice == 5: sort() # 按关键字排序 elif choice == 6: total() # 统计学生总人数 elif choice == 7: show() # 显示全部学生信息 if __name__ == '__main__': # 方便团队中之间测试用 main()