属性错误: 'unicode'对象没有属性'get'



我在从数据库创建CSV文件时遇到问题。下面是我的代码。

import pymysql  
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import csv
from datetime import datetime
import time
import json
# open connection to the database  
conn = pymysql.connect(host='your host',  
port=3306,  
user='user_name',  
passwd='',  
db='ai_demo',  
charset='utf8')  
cur = conn.cursor()  
sql = "SELECT order_data FROM `transactions`" 
cur.execute(sql) 
rows = cur.fetchall()
data = {}
dadaArray=[]
for row in rows:
#print(row)
for i in row:
s=json.loads(i)
for item in s:
date_str = item.get('date')
date_object = datetime.strptime(date_str, '%Y-%m-%d')
#print(date_object)
time_str = item.get('time')
time_object = datetime.strptime(time_str, '%H:%M:%S').time()
print(time_object)
date_time_object = datetime.combine(date_object,time_object)
#print(date_time_object)
subscription_price = item.get('totalOrderSubscriptionPrice')
data['timestamp'] =date_time_object.strftime('%Y-%m-%d %H:%M:%S')
data['price'] = json.loads(subscription_price)
#print(data)
dadaArray.append(data)

#with open("out.csv", "w", newline='') as csv_file:  # Python 3 version    
with open("out.csv", "wb") as csv_file:              # Python 2 version
csv_writer = csv.writer(csv_file)
csv_writer.writerow([data for data in dadaArray]) # write headers
csv_writer.writerows(cur)
# close connection to the database  
cur.close()  
conn.close()

问题是我正确获取了一些值,但一段时间后它开始给出错误" 属性错误:"Unicode"对象没有属性"get">

这是我的间谍的完整控制台

runfile('/Users/mss/.spyder/temp.py', wdir='/Users/mss/.spyder')
06:29:58
06:30:05
06:30:11
06:30:23
06:36:48
06:38:57
06:46:41
07:15:32
07:51:57
07:52:02
07:51:57
07:52:02
08:52:40
08:52:50
08:52:55
08:52:40
08:52:50
08:52:55
08:52:40
08:52:50
08:52:55
Traceback (most recent call last):
File "<ipython-input-3-b3aa9a745687>", line 1, in <module>
runfile('/Users/mss/.spyder/temp.py', wdir='/Users/mss/.spyder')
File "/Users/mss/opt/anaconda2/lib/python2.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 827, in runfile
execfile(filename, namespace)
File "/Users/mss/opt/anaconda2/lib/python2.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 102, in execfile
builtins.execfile(filename, *where)
File "/Users/mss/.spyder/temp.py", line 28, in <module>
date_str = item.get('date')
AttributeError: 'unicode' object has no attribute 'get'

我不确定为什么它会在两者之间停止,因为它最初为我提供了日期,但经过一些循环后,它停止并开始说"Unicode"对象没有属性'get'。但如您所见,它在显示此错误之前打印了一些日期。

这是我的项目的外观(对于 s:中的项目(:

{u'delivered': u'yes', u'versionCode': u'2.2', u'date': u'2019-09-08', u'containerGiven': u'0', u'items': [{u'unit_name': u'ML', u'pricr_per_package': 19, u'name': u'NANDINI TONED', u'containerGiven': u'0', u'sub_id': 299, u'quantity_child': 1, u'containerCollect': u'0', u'modify_data': 0, u'pro_price': 0, u'child_package_qty': 500, u'type': u'subscription', u'id': 578, u'quantity': 1}], u'totalOrderSubscriptionPrice': u'19.0', u'userId': u'989', u'containerCollect': u'0', u'time': u'06:29:58', u'custom_ids': u'[]', u'schdule_id': 54, u'subscription_ids': u'[299]'}

我可能看起来很傻。但关键是我对Python很陌生。请让我知道发生这种情况的原因。任何帮助将不胜感激!!!

所以我可以看到代码有两个问题,第一个问题是:

for i in row:
s=json.loads(i)

如果rown项长,那么您实质上是丢弃不是最后一项的每个值,n.这样做的原因是您的下一个 for 循环缩进在与此循环相同的级别上。

第二个问题是:

for item in s:
date_str = item.get('date')

由于我们知道s是一个 JSON blob(本质上是一个字典(,因此我们不能像迭代列表那样迭代它,因为我们只是迭代字典中的。似乎您希望代码如下所示:

for i in row:
s = json.loads(i)
date_str = s.get('date')
date_object = datetime.strptime(date_str, '%Y-%m-%d')
#print(date_object)
time_str = s.get('time')
...

根据您显示的数据,您实际上只需要一个 for 循环。

最新更新