簡體   English   中英

使用 Python 從 csv 構建字典列表

[英]Building list of dicts from csv using Python

我有一個包含三列和多行的 CSV 文件。 所有數據都是字符串。 我正在嘗試一次讀取 CSV 一行並將每一行轉換為一個字典,然后我想將 append 轉換為一個列表,所以我有一個字典列表。 環境是 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)

軟件運行(即,不出錯) ,但沒有產生預期的結果。 如果我在 for 循環完成后print(list_of_json) ,我希望它產生這個;

[{"device":"Dev1", "serial":"Ser1", "software":"software1"},{.....}]

但實際上產生的只是一個空列表......好像 append 語句甚至不存在;

[]

CSV 讀取和for row in reader:部件似乎都工作正常。 如果我在 for 循環中執行 print(mydevice),我可以看到它成功地通過所有設備,但由於我無法理解的原因,append 語句似乎從來沒有出現在list_of_json列表中。

為什么不只使用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

您需要在循環內創建一個新字典:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM