从CSV文件创建字典无报错但输出空白,求排查与解决建议
问题排查与修正
你的代码里的核心问题
- 未导入
csv模块:代码中使用了csv.reader但没有写import csv,这是基础错误,没报错大概率是你在代码其他位置已导入,但必须确保模块导入语句存在。 - 函数未调用:你仅定义了
make_happy_dict()函数,却没有在代码末尾写make_happy_dict()执行它,导致函数内的逻辑根本没运行,自然没有输出。 csv.reader使用逻辑混乱:- 用
infile.readline()跳过表头会干扰csv.reader的迭代,正确跳过表头的方式是用next(csv_happy)。 csv.reader返回的每一行line已经是按逗号分割好的列表,对列表调用strip("\n")会报错,之所以没报错,是因为循环根本没执行(文件指针移到末尾,无行可读)。line[0], line[2] = line.split(",")逻辑完全错误:line已经是列表,不需要再split,且用两个变量接收split结果,一旦CSV行元素数量不是2就会报错,同时直接给列表索引赋值的操作毫无意义。
- 用
- 输出位置错误:
print写在循环外,就算循环执行了也只会打印最后一行内容;若循环没执行,line变量未定义还会报错,你说输出为空,说明循环根本没运行。
修正后的可运行代码
import csv def make_happy_dict(): filename = "happiness.csv" happy_dict = {} # 打开文件时指定编码,避免中文乱码问题 with open(filename, 'r', encoding='utf-8') as infile: csv_reader = csv.reader(infile) # 跳过表头行 next(csv_reader) # 遍历每一行数据 for row in csv_reader: # 确保当前行有足够元素,避免索引越界报错 if len(row) >= 3: # 取第一列作为键,第三列作为值,去除前后空白字符 key = row[0].strip() value = row[2].strip() happy_dict[key] = value # 打印整个字典查看结果 print(happy_dict) return happy_dict # 必须调用函数才会执行逻辑 make_happy_dict()
额外注意事项
- 文件路径验证:如果
happiness.csv和代码文件不在同一文件夹,需填写完整路径,比如"D:/data/happiness.csv"(Windows)或"/home/user/data/happiness.csv"(Mac/Linux)。 - CSV格式检查:确保CSV文件每一行至少包含3个字段(代码中取了索引0和2),示例格式:
Country,Happiness Rank,Happiness Score
Finland,1,7.821
Denmark,2,7.636
- 编码问题:若CSV包含中文,打开时指定
encoding='utf-8'或encoding='gbk'(根据文件实际编码调整),避免乱码。
内容的提问来源于stack exchange,提问作者Fora Gamsonly
相关产品推荐
相关产品推荐

