问题描述
我从请求中获取字符串格式的json响应,如下所示:
results = requests.request("POST",url,data=json.dumps(payload),headers=header).json()['product']
样本输出: 打印(结果)-对象类型= 列表'>
[
{
'id': '123456','product': 'XYZ','exp_date': '03/01/2020','amount': '30.5','qty': '1'
},{
'id': '789012','product': 'ABC','exp_date': '04/15/2020','amount': '22.57','qty': '3'
},{
'id': '56789','product': 'AAA','exp_date': '03/29/2020','amount': '','qty': ' '
}
]
需要首先将所有这些字段转换为特定的数据类型,然后将其作为文档插入到MongoDB中。
什么是进行数据类型转换的有效方法?
正在考虑是否可能出现如下所示的情况,还需要知道是否存在任何空,空或空字符串值,然后在数据类型转换期间如何用默认值替换它?
new_result = []
for i in enumerate(results):
i[exp_date] = datetime.strptime(i[exp_date],'%m/%d%Y').replace(hour=0,minute=0,second=0,microsecond=0) #check for empty/null/blank values and replace with default date
new_result.append(i[exp_date])
for i in enumerate(results):
i[amount] = float(i[amount]) #check for empty/null/blank values and replace with 0.00
new_result.append(i[amount])
for i in enumerate(results):
i[qty] = int(i[qty]) #check for empty/null/blank values and replace with 0
new_result.append(i[qty])
db.collection.insert_many(new_result)
新列表输出应类似于: print(new_result)
[
{
"id": "123456","product": "XYZ","exp_date": 2020-03-01 00:00:00,"amount": 30.5,"qty": 1
},{
"id": "789012","product": "ABC","exp_date": 2020-04-15 00:00:00,"amount": 22.57,"qty": 3
},{
"id": "56789","product": "AAA","exp_date": 2020-03-29 00:00:00,"amount": 0.0,"qty": 0
}
]
解决方法
您可以执行以下操作:
import datetime
input_lst = [
{
"id": "123456","product": "XYZ","exp_date": "03/01/2020","amount": "30.5","qty": "1"
},{
"id": "789012","product": "ABC","exp_date": "04/15/2020","amount": "22.57","qty": "3"
},{
"id": "56789","product": "AAA","exp_date": "03/29/2020","amount": "","qty": " "
}
]
output_lst = []
for dct in input_lst:
tmp_dct = dct.copy()
# amount - float,qty - int4
try:
tmp_dct['amount'] = float(dct['amount'])
except:
pass
try:
tmp_dct['qty'] = int(dct['qty'])
except:
pass
try:
tmp_dct['exp_date'] = datetime.datetime.strptime(tmp_dct['exp_date'],'%m/%d/%Y').replace(hour=0,minute=0,second=0,microsecond=0) #check for empty/null/blank values and replace with default date
output_lst.append(tmp_dct)
except:
pass
print(output_lst)
这效率更高,因为您只循环了一次。