请求协助编写基于Excel的Python学生信息查询程序
学生信息查询与导出工具实现方案
1. 优化文件读取逻辑
你原来的代码读取文件后循环打印手机号的方式存在问题,用pd.read_excel可以更简洁地读取工作表并得到DataFrame,同时处理手机号的类型避免匹配错误:
import pandas as pd # 读取Excel文件的"Math"工作表 df = pd.read_excel('Students.xlsx', sheet_name='Math') # 将手机号转为字符串类型,避免数值匹配时的格式问题 df['Phone number'] = df['Phone number'].astype(str)
2. 实现多条件搜索功能
写一个函数接收用户输入的关键词,同时匹配姓名、姓氏、手机号,返回匹配的学生信息:
def search_student(keyword, df): # 统一转小写,实现不区分大小写的模糊匹配 keyword = str(keyword).lower() # 匹配Name、Last Name、Phone number三列 match_condition = ( df['Name'].str.lower().str.contains(keyword) | df['Last Name'].str.lower().str.contains(keyword) | df['Phone number'].str.contains(keyword) ) # 返回匹配结果 return df[match_condition]
3. 实现导出功能
利用pandas内置方法,将搜索结果导出为Excel或CSV文件:
def export_result(result, filename, file_type='excel'): if file_type == 'excel': result.to_excel(f'{filename}.xlsx', index=False) elif file_type == 'csv': result.to_csv(f'{filename}.csv', index=False, encoding='utf-8') print(f"结果已导出到{filename}.{file_type}")
完整运行代码
整合以上逻辑,加上用户交互流程:
import pandas as pd def main(): # 读取并预处理数据 df = pd.read_excel('Students.xlsx', sheet_name='Math') df['Phone number'] = df['Phone number'].astype(str) # 获取用户查询关键词 keyword = input("请输入要查询的姓名、姓氏或手机号:") # 执行搜索 result = search_student(keyword, df) if result.empty: print("未找到匹配的学生信息") else: print("匹配的学生信息:") print(result.to_string(index=False)) # 询问是否导出结果 export_choice = input("是否导出结果?(y/n):") if export_choice.lower() == 'y': filename = input("输入导出文件名(不含后缀):") file_type = input("选择导出类型(excel/csv):") export_result(result, filename, file_type) def search_student(keyword, df): keyword = str(keyword).lower() match_condition = ( df['Name'].str.lower().str.contains(keyword) | df['Last Name'].str.lower().str.contains(keyword) | df['Phone number'].str.contains(keyword) ) return df[match_condition] def export_result(result, filename, file_type='excel'): if file_type == 'excel': result.to_excel(f'{filename}.xlsx', index=False) elif file_type == 'csv': result.to_csv(f'{filename}.csv', index=False, encoding='utf-8') print(f"结果已导出到{filename}.{file_type}") if __name__ == "__main__": main()
测试示例
输入7745879,程序会输出:
匹配的学生信息: Name Last Name Phone number Country Mark Alex Sid 7745879 France C
之后可选择将结果导出为Excel或CSV文件。
内容的提问来源于stack exchange,提问作者Katli
相关产品推荐
相关产品推荐

