为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Python 从 csv 构建字典列表

使用 Python 从 csv 构建字典列表

凤凰求蛊 2022-06-14 17:05:48
我有一个包含三列和多行的 CSV 文件。所有数据都是字符串。我正在尝试一次读取 CSV 一行并将每一行转换为一个字典,然后我想将其附加到一个列表中,这样我就有了一个字典列表。环境是 AWS Lambda,CSV 来自 S3 存储桶。我的代码:csv_object = s3.Object('MyBucket', 'My.csv')csv_file = csv_object.get()['Body'].read().decode('utf-8')f = StringIO(csv_file)reader = csv.reader(f, delimiter=',')list_of_json = []mydevice = {}for row in reader:    mydevice["device"] = row[0]    mydevice["serial"] = row[1]    mydevice["software"] = row[2]    list_of_json.append(mydevice)软件运行(即,不出错),但没有产生预期的结果。如果我print(list_of_json)在 for 循环完成后,我希望它产生这个;[{"device":"Dev1", "serial":"Ser1", "software":"software1"},{.....}]但实际上产生的只是一个空列表......好像 append 语句甚至不存在;[]CSV 读数和for row in reader:部件似乎都工作正常。如果我在 for 循环中执行 print(mydevice) ,我可以看到它成功通过所有设备,但由于我无法理解的原因,append 语句似乎永远不会将任何内容附加到list_of_json列表中。
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

为什么不直接使用csv.DictReader


csv_object = s3.Object('MyBucket', 'My.csv')

csv_file = csv_object.get()['Body'].read().decode('utf-8')


f = StringIO(csv_file)

reader = csv.DictReader(f, ('device', 'serial', 'software'))

list_of_json = [dict(device) for device in reader]

#also don't forget to

f.close() #or use contextlib.closing


查看完整回答
反对 回复 2022-06-14
?
jeck猫

TA贡献1909条经验 获得超7个赞

您需要在循环内创建一个新字典:


csv_object = s3.Object('MyBucket', 'My.csv')

csv_file = csv_object.get()['Body'].read().decode('utf-8')


f = StringIO(csv_file)

reader = csv.reader(f, delimiter=',')


list_of_json = []


for row in reader:

    mydevice = {}

    mydevice["device"] = row[0]

    mydevice["serial"] = row[1]

    mydevice["software"] = row[2]

    list_of_json.append(mydevice)


查看完整回答
反对 回复 2022-06-14
  • 2 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信