You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:36:02