Python如何将txt文件每行数据分别加载到对应星期的列表中
问题根因
你的代码存在两个核心逻辑错误:
- 每次遍历
week_sales里的单个日期列表时,都会重新打开一次文件,把文件的所有行都追加到当前日期列表里,最终7个列表每个都被写入了全部7行内容 - 没有将读取到的字符串格式的列表转成实际的整数列表,只是把整行字符串当成单个元素追加了
修复后代码
mon_sales = [] tue_sales = [] wed_sales = [] thu_sales = [] fri_sales = [] sat_sales = [] sun_sales = [] week_sales = [mon_sales, tue_sales, wed_sales, thu_sales, fri_sales, sat_sales, sun_sales] def load_sales(file_path): """ 从文件加载销售数据到对应的星期列表中 file_path: 待加载的文件路径 加载失败时会输出异常提示 """ print('正在从文件加载销售数据: ', file_path) # 清空所有日期的旧数据 for day_sales in week_sales: day_sales.clear() try: with open(file_path, 'r', encoding='utf-8') as input_file: # 将文件行和星期列表按顺序一一配对 for line, day_sales in zip(input_file, week_sales): stripped_line = line.strip() if not stripped_line: # 自动跳过空行 continue # 把字符串格式的列表转换为真实的整数列表 import ast day_value = ast.literal_eval(stripped_line) day_sales.extend(day_value) except Exception as e: print(f'加载数据时出错: {str(e)}') print(week_sales) # 调用示例 load_sales('sales.txt')
核心修改说明
- 仅打开1次文件,通过
zip()方法将文件的行和week_sales里的星期列表按顺序对应,第一行写入周一列表、第二行写入周二列表,以此类推 - 用
ast.literal_eval()将读取到的字符串(比如"[50, 54, ...]")转成Python原生列表,再用extend()方法把每个数值追加到对应星期的列表中,而不是把整行字符串当成单个元素添加 - 把硬编码的文件名
sales.txt替换为传入的file_path参数,符合函数的初始设计逻辑 - 优化异常提示,会输出具体错误原因方便排查
内容的提问来源于stack exchange,提问作者mactire93
相关产品推荐
相关产品推荐

