Python读取CSV筛选romantic分类行时循环仅执行一次问题排查
问题根因
- 你当前代码每次匹配到符合
romantic分类的行时,都会直接给romantic['quotes']重新赋值,新的单条记录会直接覆盖之前的结果,所以最终只能看到最后一条匹配记录,并非循环提前终止。 - 初始数据结构定义错误:
romantic['quotes']需要设置为列表类型,才能存储多条筛选出的记录。
修正后代码
import csv,json # 初始化结构,quotes字段为列表用于存储多条记录 romantic = {'quotes': []} with open('quotes.csv') as csvfile: data = csv.reader(csvfile, delimiter = '|') # 如果CSV第一行是表头,可加上下面这行跳过表头 # next(data) # 筛选分类为romantic的行 for row in data: if row[5] == 'romantic': # 把当前行数据追加到quotes列表中,而非直接覆盖 romantic['quotes'].append({ 'quote': row[0], 'source': row[1], 'dob-dod': row[2], 'wplink' : row[3], 'wpimg': row[4], 'category':row[5] }) with open('romjson', 'w+') as jsonfile: json.dump(romantic, jsonfile) # 打印结果 print(romantic)
补充说明
- 调整后会把所有匹配到的记录都存入
quotes列表,输出的JSON结构也符合多数据的存储要求 - 如果你的CSV文件第一行是字段名表头,记得取消代码中
next(data)的注释,跳过表头避免索引匹配错误
内容的提问来源于stack exchange,提问作者r0bt
相关产品推荐
相关产品推荐

