Python2.7程序实现启动选年读CSV及菜单修改年份功能求助
实现方案
首先我们先封装一个公共的年份读取函数,避免启动加载和切换年份时写重复代码,同时增加输入合法性校验,防止用户输入不符合要求的年份。
完整修改后的代码
import pandas as pd # 公共函数:读取指定年份的CSV返回DataFrame,自带输入校验 def get_df(): valid_years = ["2000", "2010", "2020"] while True: year = raw_input("请输入要分析的年份(可选2000/2010/2020):").strip() if year in valid_years: file_path = "{}.rep.csv".format(year) return pd.read_csv(file_path) else: print("输入的年份不合法,请重新输入!") # 你的功能函数,注意原来的定义缺少df参数,需要补充,否则调用会报错 def function_1(df): # 你的原有逻辑 pass def function_2(df): pass def function_3(df): pass def function_4(df): pass # 菜单定义 def menu(): print("[1]: 1st Function") print("[2]: 2nd Function") print("[3]: 3rd Function") print("[4]: 4th Function") print("[6]: Modify the year to analyse") print("[0]: Quit Program") # 主逻辑 if __name__ == "__main__": # 启动时先加载初始年份数据 df = get_df() menu() option = int(raw_input("Select an option: ")) while option != 0: if option == 1: function_1(df) elif option == 2: function_2(df) elif option == 3: function_3(df) elif option == 4: function_4(df) elif option == 6: # 切换年份,更新df df = get_df() print("年份已修改,后续功能将使用新年份的数据") else: print("This option is not valid.") menu() # 注意原来的input要改成raw_input,Python2中input会执行输入的表达式,容易报错 option = int(raw_input("Select option: ")) print("Thanks for using program.")
关键修改说明
- 新增
get_df()公共函数,统一处理年份输入校验和CSV读取逻辑,启动和切换年份都调用该函数 - 程序启动后第一时间调用
get_df()获取初始的DataFrame对象 - 菜单逻辑中新增选项6的分支,调用
get_df()更新全局df变量,后续所有功能调用都会使用新年份的数据 - 修正了原代码中循环内用
input()获取输入的问题,Python2环境下统一用raw_input()获取输入后转类型,避免执行恶意输入的代码
注意事项
你原来的功能函数定义是def function_1():,但调用时传入了df参数,需要把所有功能函数的定义修改为def function_1(df):,否则运行时会抛出参数数量不匹配的错误。
内容的提问来源于stack exchange,提问作者Boston Co
相关产品推荐
相关产品推荐

