2017-01-10 46 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 

我的Python的知识比较粗略,而我传递变量通过作为一个字符串,而不是一个表达式或对象,因此它给我的错误。什么是创建变量并调用我想要的键的正确方法。

提前致谢!

+0

只需检查 - ([“L1_METADATA_FILE”],[“IMAGE_ATTRIBUTES”],[“CLOUD_COVER”])..逗号分隔.. – Harsha

+0

@HarshaBiyani逗号分隔的格式为“%s%s%s “%声明...但我知道它创建了一个字符串,我不认为这是正确的变量类型... –

+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]) 

应该避免任何错误。