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
相关产品推荐
相关产品推荐

