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

如何将多个CSV数据追加到字典?现有代码仅读取单个文件

问题排查与解决建议

问题原因

你当前代码的核心问题是缩进错误:遍历DictReader_obj的for循环写在了with open代码块的外面。当with块执行完毕后,文件会被自动关闭,此时DictReader_obj依赖的文件流已经失效,只有最后一次循环创建的DictReader_obj可能读取到内容,最终导致只能获取单个CSV文件的数据。

另外,你初始化的list_df是列表结构,和你期望的「按Symbols分组的嵌套结构」不匹配,需要调整数据组织方式。

修正后的代码实现

以下代码会读取所有CSV文件,并将数据整理成以Symbols为键、对应行情数据列表为值的字典结构,符合你期望的格式:

from csv import DictReader
import glob

# 初始化目标字典:键为Symbols,值为该标的的所有行情数据列表
symbol_data = {}

# 获取所有CSV文件路径(根据实际路径调整glob规则)
csvfiles = glob.glob("*.csv")

for csvfile in csvfiles:
    with open(csvfile, 'r') as f:
        # 指定字段名创建DictReader
        reader = DictReader(f, fieldnames=['Symbols', 'Date', 'Open', 'High', 'Low', 'Close', 'Volumn'])
        # 遍历每一行数据,注意跳过表头(如果CSV本身有表头的话)
        for row in reader:
            # 跳过空行或无效行(可选,根据你的CSV情况调整)
            if not row['Symbols']:
                continue
            symbol = row['Symbols']
            # 移除Symbols字段,只保留行情数据
            price_data = {k: v for k, v in row.items() if k != 'Symbols'}
            # 若该标的已在字典中,追加数据;否则新建列表
            if symbol in symbol_data:
                symbol_data[symbol].append(price_data)
            else:
                symbol_data[symbol] = [price_data]

# 打印整理后的结果示例
for symbol, data_list in symbol_data.items():
    print(f"{symbol}")
    for data in data_list:
        print(f"          {data['Date']}    {data['Open']}   {data['High']}  {data['Close']}  {data['Volumn']}")

额外说明

  1. 如果你的CSV文件本身已经包含表头,记得在创建DictReader时去掉fieldnames参数,或者添加逻辑跳过表头行,避免表头被当作数据读取。
  2. 代码中加入了空行/无效行的判断,你可以根据实际CSV的格式调整过滤逻辑。
  3. 最终的symbol_data字典结构为:{symbol: [{'Date': 'xx/xx/xxxx', 'Open': 'xxx.xx', ...}, ...], ...},完全匹配你期望的分组展示需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:45:37