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

Python读取可变行数CSV文件,生成以id值为名称的字典失败求助

问题分析与解决方案

你的代码主要存在两个问题:

  • 分隔符错误:示例CSV使用空格分隔字段,但代码中指定了delimiter="\t"(制表符),导致csv模块无法正确解析列数据。
  • 未匹配需求:代码将所有数据存入new_card字典,但你需要的是每个id对应一个独立的变量(如id03)。

修正方案

方案1:使用统一字典存储(推荐,避免变量混乱)

这种方式更安全,所有数据集中管理,不会污染全局变量:

import csv

with open("freeCards.csv", 'r') as file:
    # 指定空格为分隔符,同时跳过字段前的空格(适配多空格分隔场景)
    reader = csv.DictReader(file, delimiter=' ', skipinitialspace=True)
    card_dict = {}
    for row in reader:
        # 构造合法变量名(Python不允许数字开头,所以加前缀"id")
        key = f"id{row['id']}"
        card_dict[key] = {
            'date': row['date'],
            'time': row['time'],
            'name': row['name']
        }

# 访问示例:打印id03的数据
print(card_dict['id03'])
# 输出: {'date': '03.02', 'time': '1600', 'name': 'John'}

方案2:动态创建独立变量(完全匹配你的需求)

如果必须生成id01、id03这类独立变量,可以通过globals()动态创建:

import csv

with open("freeCards.csv", 'r') as file:
    reader = csv.DictReader(file, delimiter=' ', skipinitialspace=True)
    for row in reader:
        var_name = f"id{row['id']}"
        # 动态注册全局变量
        globals()[var_name] = {
            'date': row['date'],
            'time': row['time'],
            'name': row['name']
        }

# 直接访问生成的变量
print(id03)
# 输出: {'date': '03.02', 'time': '1600', 'name': 'John'}

关键说明

  • skipinitialspace=True:处理CSV中可能存在的多空格分隔场景,确保每个字段被正确识别。
  • 变量命名规则:Python不允许变量名以数字开头,所以给id值加上id前缀(如01→id01),避免语法错误。
  • 动态变量风险:使用globals()创建变量可能覆盖已有全局变量,除非必要,优先选择方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:42:19