2013-06-19 32 views
0

嗨我想將文件的內容(本例中爲Landsat 7元數據文件)轉換爲由Python 2.7使用文件內容定義的一系列變量。文件內容如下:將元數據文件的內容轉換爲變量列表

GROUP = L1_METADATA_FILE 
     GROUP = METADATA_FILE_INFO 
     ORIGIN = "Image courtesy of the U.S. Geological Survey" 
     REQUEST_ID = "0101305309253_00043" 
     LANDSAT_SCENE_ID = "LE71460402010069SGS00" 
     FILE_DATE = 2013-06-02T11:19:59Z 
     STATION_ID = "SGS" 
     PROCESSING_SOFTWARE_VERSION = "LPGS_12.2.1" 
     DATA_CATEGORY = "NOMINAL" 
     END_GROUP = METADATA_FILE_INFO 
     GROUP = PRODUCT_METADATA 
     DATA_TYPE = "L1T" 
     ELEVATION_SOURCE = "GLS2000" 
     OUTPUT_FORMAT = "GEOTIFF" 
     EPHEMERIS_TYPE = "DEFINITIVE" 
     SPACECRAFT_ID = "LANDSAT_7" 
     SENSOR_ID = "ETM" 
     SENSOR_MODE = "BUMPER" 
     WRS_PATH = 146 
     WRS_ROW = 040 
     DATE_ACQUIRED = 2010-03-10 

GROUP = IMAGE_ATTRIBUTES 
    CLOUD_COVER = 0.00 
    IMAGE_QUALITY = 9 
    SUN_AZIMUTH = 137.38394502 
    SUN_ELEVATION = 48.01114126 
    GROUND_CONTROL_POINTS_MODEL = 55 
    GEOMETRIC_RMSE_MODEL = 3.790 
    GEOMETRIC_RMSE_MODEL_Y = 2.776 
    GEOMETRIC_RMSE_MODEL_X = 2.580 
    END_GROUP = IMAGE_ATTRIBUTES 


    Example of interested variable items: 

    GROUP = MIN_MAX_RADIANCE 
     RADIANCE_MAXIMUM_BAND_1 = 293.700 
     RADIANCE_MINIMUM_BAND_1 = -6.200 
     RADIANCE_MAXIMUM_BAND_2 = 300.900 
     RADIANCE_MINIMUM_BAND_2 = -6.400 
     RADIANCE_MAXIMUM_BAND_3 = 234.400 
     RADIANCE_MINIMUM_BAND_3 = -5.000 
     RADIANCE_MAXIMUM_BAND_4 = 241.100 
     RADIANCE_MINIMUM_BAND_4 = -5.100 
     RADIANCE_MAXIMUM_BAND_5 = 47.570 
     RADIANCE_MINIMUM_BAND_5 = -1.000 
     RADIANCE_MAXIMUM_BAND_6_VCID_1 = 17.040 
     RADIANCE_MINIMUM_BAND_6_VCID_1 = 0.000 
     RADIANCE_MAXIMUM_BAND_6_VCID_2 = 12.650 
     RADIANCE_MINIMUM_BAND_6_VCID_2 = 3.200 
     RADIANCE_MAXIMUM_BAND_7 = 16.540 
     RADIANCE_MINIMUM_BAND_7 = -0.350 
     RADIANCE_MAXIMUM_BAND_8 = 243.100 
     RADIANCE_MINIMUM_BAND_8 = -4.700 
     END_GROUP = MIN_MAX_RADIANCE 

我打開其他的想法,因爲我並不需要所有條目作爲變量,只是一個選擇。而且我看到一些標題不止一次列出。即GROUP被多次使用。我需要能夠選擇某些變量(整數值)並在代碼的其他區域使用公式。任何幫助將不勝感激(新手python編碼器)。

+0

這是真的原始數據還是不同部分的印章?我只是問,因爲GROUP = PRODUCT_METADATA沒有END_GROUP,IMAGE_ATTRIBUTES的封閉標籤沒有正確對齊。 –

+0

它是一份砍伐工作。我認爲整個文件有點長,包括 – Simon

回答

0

我不知道你在找什麼,但也許是這樣的:

s = '''GROUP = L1_METADATA_FILE 
    GROUP = METADATA_FILE_INFO 
    ORIGIN = "Image courtesy of the U.S. Geological Survey" 
    REQUEST_ID = "0101305309253_00043" 
    LANDSAT_SCENE_ID = "LE71460402010069SGS00" 
    FILE_DATE = 2013-06-02T11:19:59Z 
    STATION_ID = "SGS" 
    PROCESSING_SOFTWARE_VERSION = "LPGS_12.2.1" 
    DATA_CATEGORY = "NOMINAL" 
    END_GROUP = METADATA_FILE_INFO 
    GROUP = PRODUCT_METADATA 
    DATA_TYPE = "L1T" 
    ELEVATION_SOURCE = "GLS2000" 
    OUTPUT_FORMAT = "GEOTIFF" 
    EPHEMERIS_TYPE = "DEFINITIVE" 
    SPACECRAFT_ID = "LANDSAT_7" 
    SENSOR_ID = "ETM" 
    SENSOR_MODE = "BUMPER" 
    WRS_PATH = 146 
    WRS_ROW = 040 
    DATE_ACQUIRED = 2010-03-10''' 


output = {} #Dict 
for line in s.split("\n"): #Iterates through every line in the string 
    l = line.split("=") #Seperate by "=" and put into a list 
    output[l[0].strip()] = l[1].strip() #First word is key, second word is value 

print output #Output is a dictonary containing all key-value pairs in your metadata seperated by "=" 

print output["SENSOR_ID"] #Outputs "ETM" 

==============

編輯:

f = open('metadata.txt', 'r') #open file for reading 

def build_data(f): #build dictionary 

    output = {} #Dict 
    for line in f.readlines(): #Iterates through every line in the string 
     if "=" in line: #make sure line has data as wanted 
      l = line.split("=") #Seperate by "=" and put into a list 
      output[l[0].strip()] = l[1].strip() #First word is key, second word is value 

    return output #Returns a dictionary with the key, value pairs. 

data = build_data(f) 

print data["IMAGE_QUALITY"] #prints 9 
+0

感謝DCaliber,看起來像我後,但我不能從它得到任何輸出。此方法是否需要複製和粘貼元數據文件的內容?我需要能夠自動完成這個過程,因爲我有100個圖像可以通過。 – Simon

+0

我剛將它編輯成一個函數。因此,您可以從構建的字典中獲取變量的值。如果您想要包含來自多個來源的所有變量數據的單個字典文件,則可以製作嵌套字典。即data [file1] [variable] = value – DCaliber