निम्नलिखित कोड मुझे त्रुटि दे रहा है:

Traceback (most recent call last):   File "AMZGetPendingOrders.py", line 66, in <module>
    item_list.append(item['SellerSKU']) TypeError: string indices must be integers

कोड:

from mws import mws
import time
import json
import xmltodict

access_key = 'xx' #replace with your access key
seller_id = 'yy' #replace with your seller id
secret_key = 'zz' #replace with your secret key
marketplace_usa = '00'

orders_api = mws.Orders(access_key, secret_key, seller_id)
orders = orders_api.list_orders(marketplaceids=[marketplace_usa], orderstatus=('Pending'), fulfillment_channels=('MFN'), created_after='2018-07-01')

#save as XML file
filename = 'c:order.xml'
with open(filename, 'w') as f:
    f.write(orders.original)

#ConvertXML to JSON     
dictString = json.dumps(xmltodict.parse(orders.original))

#Write new JSON to file
with open("output.json", 'w') as f:
  f.write(dictString) 

#Read JSON and parse our order number  
with open('output.json', 'r') as jsonfile:
    data = json.load(jsonfile)

#initialize blank dictionary
id_list = []

for order in data['ListOrdersResponse']['ListOrdersResult']['Orders']['Order']:
    id_list.append(order['AmazonOrderId'])

#This "gets" the orderitem info - this code actually is similar to the initial Amazon "get" though it has fewer switches
orders_api = mws.Orders(access_key, secret_key, seller_id)

#opens and empties the orderitem.xml file
open('c:orderitem.xml', 'w').close()


#iterated through the list of AmazonOrderIds and writes the item information to orderitem.xml
for x in id_list:
    orders = orders_api.list_order_items(amazon_order_id = x)
    filename = 'c:orderitem.xml'
    with open(filename, 'a') as f:
        f.write(orders.original)

#ConvertXML to JSON     
amz_items_pending = json.dumps(xmltodict.parse(orders.original))

#Write new JSON to file
with open("pending.json", 'w') as f:
  f.write(amz_items_pending) 

#read JSON and parse item_no and qty
with open('pending.json', 'r') as jsonfile1:
    data1 = json.load(jsonfile1)


#initialize blank dictionary
item_list = []

for item in data1['ListOrderItemsResponse']['ListOrderItemsResult']['OrderItems']['OrderItem']:
    item_list.append(item['SellerSKU']) 


#print(item)
#print(id_list)

#print(data1)
#print(item_list)

time.sleep(10)

मुझे समझ में नहीं आता कि पाइथन क्यों सोचता है कि यह एक सूची है न कि एक शब्दकोश। जब मैं id_list प्रिंट करता हूं तो यह एक शब्दकोश की तरह दिखता है (घुंघराले ब्रेसिज़, सिंगल कोट्स, कोलन, आदि)

print(data1) मेरा शब्दकोश दिखाता है

{
   'ListOrderItemsResponse':{
      '@xmlns':'https://mws.amazonservices.com/Orders/201 3-09-01',
      'ListOrderItemsResult':{
         'OrderItems':{
            'OrderItem':{
               'QuantityOrdered ':'1',
               'Title':'Delta Rothko Rolling Bicycle Stand',
               'ConditionId':'New',
               'Is Gift':'false',
               'ASIN':'B00XXXXTIK',
               'SellerSKU':'9934638',
               'OrderItemId':'49 624373726506',
               'ProductInfo':{
                  'NumberOfItems':'1'
               },
               'QuantityShipped':'0',
               'C onditionSubtypeId':'New'
            }
         },
         'AmazonOrderId':'112-9XXXXXX-XXXXXXX'
      },
      'ResponseM etadata':{
         'RequestId':'8XXXXX8-0866-44a4-96f5-XXXXXXXXXXXX'
      }
   }
}

कोई विचार?

0
RzeroBzero 28 जुलाई 2018, 23:45
इसका डुप्लिकेट जैसा दिखता है: stackoverflow.com/questions/6077675/…
 – 
gregory
29 जुलाई 2018, 01:57

2 जवाब

क्योंकि आप ताना में प्रत्येक प्रमुख मूल्य पर पुनरावृति कर रहे हैं:

{'QuantityOrdered ': '1', 'Title': 'Delta Rothko Rolling Bicycle Stand', 'ConditionId': 'New', 'Is Gift': 'false', 'ASIN': 'B00XXXXTIK', 'SellerSKU': '9934638', 'OrderItemId': '49 624373726506', 'ProductInfo': {'NumberOfItems': '1'}, 'QuantityShipped': '0', 'C onditionSubtypeId': 'New'}

तो आइटम में पहला मान 'क्वांटिटीऑर्डर' होगा और आप इस स्ट्रिंग को एक्सेस करने का प्रयास कर रहे हैं जैसे कि यह डिक्शनरी है

आप बस कर सकते हैं:

id_list.append(data1['ListOrderItemsResponse']['ListOrderItemsResult']['OrderItems']['OrderItem']['SellerSKU']))

और शब्दकोश में लूप के लिए बचें

0
dilkash 28 जुलाई 2018, 23:56
वह काम किया! इसने मुझे प्रत्येक ऑर्डर के लिए SellerSKU दिया। अब अगर मैं एक फॉलोअप पूछ सकता हूं - क्या आप जानते हैं कि मैं सेलरएसकेयू और क्वांटिटीऑर्डर को कॉमा से अलग करके कैसे निकाल पाऊंगा?
 – 
RzeroBzero
29 जुलाई 2018, 00:44
इसी तरह data1['ListOrderItemsResponse']['ListOrderItemsResult']['OrderItems']['OrderItem']['QuantityOrdered'], ध्यान रखें कि "QuantityOrdered" कुंजी के अंत में स्पेस है, जबकि स्पेस को शामिल करना न भूलें एक्सेस करना, क्या आप उत्तर को सही मानते हैं यदि यह आपके लिए काम करता है :)
 – 
dilkash
29 जुलाई 2018, 10:13

मुझे लगता है कि आप OrderItems को पुनरावृति करने और उनके SellerSKU मानों को खोजने का प्रयास कर रहे हैं।

for item in data1['ListOrderItemsResponse']['ListOrderItemsResult']['OrderItems']:
  item_list.append(item['SellerSKU'])
0
Ravin Gupta 29 जुलाई 2018, 00:50
दुर्भाग्य से, इसने मुझे वही त्रुटि संदेश दिया। हालांकि उपरोक्त सिंगल लाइन समाधान ने काम किया।
 – 
RzeroBzero
29 जुलाई 2018, 00:48
फिर कोशिश करें item_list.append(str(item['SellerSKU'])) अगर आइटम ['SellerSKU'] और पास
 – 
Ravin Gupta
29 जुलाई 2018, 00:50