[英]Python create list of dictionaries from csv on S3
我正在嘗試使用 CSV 並使用來自 S3 的 CSV 在 python 中創建字典列表。 代碼如下:
import os
import boto3
import csv
import json
from io import StringIO
import logging
import time
s3 = boto3.resource('s3')
s3Client = boto3.client('s3','us-east-1')
bucket = 'some-bucket'
key = 'some-key'
obj = s3Client.get_object(Bucket = bucket, Key = key)
lines = obj['Body'].read().decode('utf-8').splitlines(True)
newl = []
for line in csv.reader(lines, quotechar='"', delimiter=',',quoting=csv.QUOTE_ALL,skipinitialspace=True, escapechar="\\"):
newl.append(line)
fieldnames = newl[0]
newl1 = newl[1:]
reader = csv.DictReader(newl1,fieldnames)
out = json.dumps([row for row in reader])
jlist1 = json.loads(out)
但這給了我錯誤:
iterator should return strings, not list (did you open the file in text mode?)
如果我將 for 循環更改為:
for line in csv.reader(lines, quotechar='"', delimiter=',',quoting=csv.QUOTE_ALL,skipinitialspace=True, escapechar="\\"):
newl.append(','.join(line))
然后它可以工作,但是有些字段中包含逗號,因此這完全搞砸了架構並移動了數據。 例如:
|address1 |address2 |state|
------------------------------
|123 Main st|APT 3, Fl1|TX |
變成:
|address1 |address2 |state|null|
-----------------------------------
|123 Main st|APT 3 |Fl1 |TX |
我哪里錯了?
問題是您正在此處構建列表列表:
newl.append(line)
正如錯誤所說:迭代器應該返回字符串,而不是列表
所以嘗試將 line 轉換為字符串:
newl.append(str(line))
希望這可以幫助 :)
我最終將代碼更改為:
obj = s3Client.get_object(Bucket = bucket, Key = key)
lines1 = obj['Body'].read().decode('utf-8').split('\n')
fieldnames = lines1[0].replace('"','').split(',')
testls = [row for row in csv.DictReader(lines1[1:], fieldnames)]
out = json.dumps([row for row in testls])
jlist1 = json.loads(out)
並得到了想要的結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.