2015-12-04 60 views
0

我試圖從JSON文件中提取某些值。這是我的代碼。從JSON文件中提取值Python錯誤

ifile = open(ifile_name, 'r') 

json_decode=json.load(ifile) 
result = [] 
for item in json_decode: 
    my_dict={} 
    my_dict['Culture']['Movies']['2014']['Gravity']= item.get('Director') 
    my_dict['Culture']['Movies']['2014']['Blue Jasmine'] = item.get('Director') 
    print my_dict 
    result.append(my_dict) 
    back_jason=json.dumps(result, ofile) 
    with open(ofile_name, "w+") as file : 
     file.write(back_jason) 

我試圖提取導演誰在2014年執導的影片不過的名字,當我運行上面的代碼,我給下面的錯誤。

my_dict['Culture']['Movies']['2014']['Gravity']= item.get('Director') 
AttributeError: 'unicode' object has no attribute 'get' 

任何人都可以解釋爲什麼我從我的代碼中得到這個錯誤?

這裏是JSON文件

{ 
"Culture": { 
    "Movies": { 
     "2015": { 
      "Birdman": { 
       "Genre": "Comedy", 
       "Director": "Alejandro Inarritu", 
       "Oscars": 9, 
       "Actors": [ 
        "Michael Keaton", 
        "Enma Stone", 
        "Edward Norton", 
        "Naomi Watts" 
       ] 
      }, 
      "The Imitation Game": { 
       "Genre": "Drama", 
       "Director": "Morten Tyldum", 
       "Oscars": 8, 
       "Actors": [ 
        "Benedict Cumberbatch", 
        "Keira Knightley", 
        "Matthew Goode" 
       ] 
      }, 
      "Magic in the Moonlight": { 
       "Genre": "Comedy", 
       "Director": "Woody Allen", 
       "Oscars": 0, 
       "Actors": [ 
        "Enma Stone", 
        "Colin Firth", 
        "Marcia Harden" 
       ] 
      } 
     }, 
     "2014": { 
      "Gravity": { 
       "Genre": "Drama", 
       "Director": "Alfonso Cuaron", 
       "Oscars": 10, 
       "Actors": [ 
        "Sandra Bullock", 
        "George Clooney", 
        "Ed Harris", 
        "Paul Sharma" 
       ] 
      }, 
      "Blue Jasmine": { 
       "Genre": "Comedy", 
       "Director": "Woody Allen", 
       "Oscars": 1, 
       "Actors": [ 
        "Cate Blanchett", 
        "Sally Hawkins", 
        "Alec Baldwin" 
       ] 
      }, 
      "Blended": { 
       "Genre": "Romance", 
       "Director": "Frank Coraci", 
       "Oscars": 0, 
       "Actors": [ 
        "Adam Sandler", 
        "Drew Barrymore", 
        "Jack Giarraputo" 
       ] 
      }, 
      "Ocho Apellidos Vascos": { 
       "Genre": "Comedy", 
       "Director": "Emilio Lazaro", 
       "Oscars": 0, 
       "Actors": [ 
        "Dani Rovira", 
        "Clara Lago", 
        "Karra Elejalde", 
        "Carmen Machi" 
       ] 
      } 
     } 
    }, 
    "Books": { 
     "2015": { 
      "Go Set a Watchman": { 
       "Genre": "Fiction", 
       "Author": "Harper Lee", 
       "Pages": 278 
      }, 
      "The Girl on the Train": { 
       "Genre": "Thriller", 
       "Author": "Paula Hawkins", 
       "Pages": 320 
      } 
     }, 
     "2014": { 
      "El Barco de los Ninos": { 
       "Genre": "Children", 
       "Author": "Mario Llosa", 
       "Pages": 96 
      }, 
      "Sapiens": { 
       "Genre": "History", 
       "Author": "Yuval Harari", 
       "Pages": 464 
      } 
     } 
    } 
} 

}

謝謝。

+0

帖子什麼是文件即樣本文件內容 – SIslam

+0

@SIslam我有內容更新的問題的JSON文件,抱歉。 – colin

+0

你能澄清一下你想寫在第二個文件(ofile_name)中嗎? - 只是導演的名字?您正試圖以不好的方式構建字典(my_dict)。 – SIslam

回答

3

儘量只迭代器作爲關鍵dictionary-

import json 

ifile = open(r"D:\tst.txt", 'r') 

json_decode=json.load(ifile) 
result = [] 
for i in json_decode['Culture']['Movies']['2014']: 
    data = json_decode['Culture']['Movies']['2014'][i]['Director'] 
    print data 
    result.append(data) 

with open(r"D:\tst1.txt", "w+") as file : 
    for j in result: 
     file.write(j+'\n') 

輸出文件的內容 -

Frank Coraci 
Emilio Lazaro 
Woody Allen 
Alfonso Cuaron 
+0

這很好,現在我有了更好的理解。謝謝! – colin