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

Python新手优化嵌套for循环处理用户CSV数据问题求助

Python用户数据汇总代码性能优化方案

原有代码的核心问题

  • 时间复杂度过高:原有嵌套循环逻辑为「遍历每个用户→遍历所有CSV行匹配」,时间复杂度为O(用户数 * CSV总行数),用户量较大时会出现明显的性能瓶颈
  • 存在逻辑漏洞:遍历90天CSV的循环中,每次读取新的CSV都会覆盖read_csv变量,最终仅会处理最后一天的CSV数据,前面89天的所有数据都会丢失
  • 存在判断效率低:使用列表做用户名匹配判断,列表的in操作时间复杂度为O(n),匹配效率极低

优化方案

核心优化思路

直接反转遍历逻辑,改为「遍历每个CSV行→判断用户是否在目标列表中」,单次遍历即可完成所有匹配操作,整体时间复杂度降到O(CSV总行数),同时将用户名列表转为集合,将存在判断的时间复杂度降到O(1)。

优化后可运行代码

import csv

# 预初始化数据容器,同时构建用户名集合用于快速判断
main_data = {}
user_set = set()
with open("./listofusernames.txt") as usernames:
    username_list = usernames.read().splitlines()
for user in username_list:
    main_data[user] = []
    user_set.add(user)

# 遍历所有CSV文件,读取的同时直接处理数据
for i in range(1, 91):
    csvdir = f"./csvfiles/usagedata_{i}.csv"
    with open(csvdir, 'r') as daily_usage_csv:
        csv_reader = csv.reader(daily_usage_csv)
        # 单次遍历CSV行即可完成所有匹配
        for line in csv_reader:
            username = line[0]
            if username in user_set:
                main_data[username].append(line[1])
                main_data[username].append(line[2])

额外优化建议

如果你的数据量非常大,还可以用pandas做批量向量化处理,速度会比纯Python循环快数倍到数十倍,示例代码如下:

import pandas as pd

# 读取用户名列表
with open("./listofusernames.txt") as f:
    username_list = f.read().splitlines()

# 批量读取所有CSV并合并
all_data = []
for i in range(1,91):
    path = f"./csvfiles/usagedata_{i}.csv"
    df = pd.read_csv(path, header=None, usecols=[0,1,2], names=["username", "val1", "val2"])
    # 直接过滤目标用户
    df = df[df["username"].isin(username_list)]
    all_data.append(df)

# 合并后按用户分组聚合
merged = pd.concat(all_data)
main_data = merged.groupby("username")[["val1", "val2"]].apply(lambda x: x.values.flatten().tolist()).to_dict()

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:36:03