猿问

使用 Python 从 csv 构建字典列表

我有一个包含三列和多行的 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列表中。


凤凰求蛊
浏览 171回答 2
2回答

一只萌萌小番薯

为什么不直接使用csv.DictReadercsv_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 tof.close() #or use contextlib.closing

jeck猫

您需要在循环内创建一个新字典: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)
随时随地看视频慕课网APP

相关分类

Python
我要回答