2017-01-10 1 views
0

Я читаю json-файл со словарем и значениями, но я борюсь за использование переменной в качестве элемента запроса при поиске json-файла.Доступ к данным файла JSON с использованием запрограммированного запроса - Python

x = value_cloud = "%s%s%s" % (["L1_METADATA_FILE"],["IMAGE_ATTRIBUTES"],["CLOUD_COVER"]) 

    for meta in filelist(dir): 
     with open (meta) as data_file: 
      data = json.load(data_file) 
     cloud = str(data[x]) 

Ошибки я получаю:

Traceback (most recent call last): 
    File "E:\SAMPLE\Sample_Script_AWS\L8_TOA_using_gdal_rasterio.py", line 96, in <module> 
    cloud = str(data[x]) 
    KeyError: "['L1_METADATA_FILE']['IMAGE_ATTRIBUTES']['CLOUD_COVER']" 

То, что я на самом деле хочу, чтобы найти файл JSon для ключа в переменной ... Ключи существуют в файле JSon, потому что, когда Я запускаю следующее, я получаю правильный вывод.

cloud = str(data["L1_METADATA_FILE"]["IMAGE_ATTRIBUTES"]["CLOUD_COVER"]) 
    print cloud 

Мои знания питона отрывочны, и я передаю переменную через как строку, а не выражение или объект, и поэтому он дает мне эту ошибку. Каков правильный способ создания переменной и вызвать нужные мне ключи.

Заранее благодарен!

+0

Просто проверьте - вы дали (["L1_METADATA_FILE"], ["IMAGE_ATTRIBUTES"], ["CLOUD_COVER"]) .. разделены запятыми .. – Harsha

+0

@HarshaBiyani разделен запятой - формат, необходимый для "% s% s% s "% statement ... но я знаю, что он создает строку, и я не думаю, что это правильный тип переменной ... –

+1

Ваш ключ заканчивается, включая скобки в строке, что нехорошо. Можете ли вы просто использовать каждый ключ в своей переменной, например 'x, y, z =" L1_METADATA_FILE "," IMAGE_ATTRIBUTES "," CLOUD_COVER ", а затем' cloud = str (data [x] [y] [z]) ' ? – coralvanda

ответ

0

Ваш ключ заканчивается, включая скобки в строке, с которой происходит ошибка. Если вы используете каждый ключ в своей собственной переменной, например:

x, y, z = "L1_METADATA_FILE", "IMAGE_ATTRIBUTES" , "CLOUD_COVER" 

, а затем:

cloud = str(data[x][y][z]) 

он должен избегать любых ошибок.

Смежные вопросы