2016-09-28 4 views
0

.json은 많은 도시/국가가 포함 된 으로 변환되었습니다.입력에 따라 문자열의 특정 부분을 추출합니다.

사용자의 국가 선택에 따라 도시 정보를 추출하고 싶습니다. (런던은 단지 예일뿐입니다). 사용자 을 inputed Country 예를 들어

이었다 : UK 다음과 같은 정보가 문자열에서 추출 할 것이다 : 나는 아마도 내 경험 부족이 인해를 얻을 수있는 방법에 너무 확실하지 않다

, if 문이 필요하다는 것을 알고 있습니다. 지금까지 내 진행 :

Country = raw_input('Country: ') 
if 'UK' in string: 
    ??? 
+0

'json' 모듈을 사용하여 JSON을 구문 분석하는 방법을 알고 있습니까? – FamousJameous

+0

@FamousJameous 흠, 아니, 내가 추측 하건대. – ThatOnePythonNoob

+0

다음 링크는 나중에 참조 할 수 있습니다. https://docs.python.org/2.7/library/json.html – FamousJameous

답변

1

처음 응답은 그리 좋지 않았습니다. 우리 중 일부는 원시 JSON을 간과했기 때문입니다. 그러나 을 제공 했으므로 앞으로 더 자세하고 유용한 스 니펫을 제공하는 것이 더 낫습니다. 말했다

, 나는 사전에 데이터를로드하고 같은 일을 할 것입니다 :

import json 

json_string = """{ 
    "response": { 
    "version":"0.1", 
    "termsofService":"http://www.wunderground.com/weather/api/d/terms.html", 
    "features": { 
    "conditions": 1 
    } 
     , "results": [ 
     { 
     "name": "London", 
     "city": "London", 
     "state": "AR", 
     "country": "US", 
     "country_iso3166":"US", 
     "country_name":"USA", 
     "zmw": "72847.1.99999", 
     "l": "https://stackoverflow.com/q/zmw:72847.1.99999" 
     } 
     , 
     { 
     "name": "London", 
     "city": "London", 
     "state": "KY", 
     "country": "US", 
     "country_iso3166":"US", 
     "country_name":"USA", 
     "zmw": "40741.1.99999", 
     "l": "https://stackoverflow.com/q/zmw:40741.1.99999" 
     } 
     , 
     { 
     "name": "London", 
     "city": "London", 
     "state": "MN", 
     "country": "US", 
     "country_iso3166":"US", 
     "country_name":"USA", 
     "zmw": "56036.3.99999", 
     "l": "https://stackoverflow.com/q/zmw:56036.3.99999" 
     } 
     , 
     { 
     "name": "London", 
     "city": "London", 
     "state": "OH", 
     "country": "US", 
     "country_iso3166":"US", 
     "country_name":"USA", 
     "zmw": "43140.1.99999", 
     "l": "https://stackoverflow.com/q/zmw:43140.1.99999" 
     } 
     , 
     { 
     "name": "London", 
     "city": "London", 
     "state": "ON", 
     "country": "CA", 
     "country_iso3166":"CA", 
     "country_name":"Canada", 
     "zmw": "00000.1.71623", 
     "l": "https://stackoverflow.com/q/zmw:00000.1.71623" 
     } 
     , 
     { 
     "name": "London", 
     "city": "London", 
     "state": "TX", 
     "country": "US", 
     "country_iso3166":"US", 
     "country_name":"USA", 
     "zmw": "76854.1.99999", 
     "l": "https://stackoverflow.com/q/zmw:76854.1.99999" 
     } 
     , 
     { 
     "name": "London", 
     "city": "London", 
     "state": "", 
     "country": "UK", 
     "country_iso3166":"GB", 
     "country_name":"United Kingdom", 
     "zmw": "00000.1.03772", 
     "l": "https://stackoverflow.com/q/zmw:00000.1.03772" 
     } 
     , 
     { 
     "name": "London", 
     "city": "London", 
     "state": "WV", 
     "country": "US", 
     "country_iso3166":"US", 
     "country_name":"USA", 
     "zmw": "25126.1.99999", 
     "l": "https://stackoverflow.com/q/zmw:25126.1.99999" 
     } 
     ] 
    } 
}""" 

json_object = json.loads(json_string) 

world_dict = {} 
for item in json_object['response']['results']: 
    item_country = item['country'] 
    in_dict = world_dict.get(item_country) 
    if in_dict: 
     world_dict[item_country].extend([item]) 
    else: 
     world_dict[item_country] = [item] 

country = raw_input('Country: ') 

response = world_dict.get(country) 
if response: 
    for item in response: 
     print item 
else: 
    print "Not a valid country" 

편집 : JSON 문자열이 아닌 URL을 사용하여 의견을 바탕으로 .

import requests 

url = 'http://api.wunderground.com/api/a8c3e5ce8970ae66/conditions/q/London.json' 

data = requests.get(url).json() 


world_dict = {} 
for item in data['response']['results']: 
    item_country = item['country'] 
    in_dict = world_dict.get(item_country) 
    if in_dict: 
     world_dict[item_country].extend([item]) 
    else: 
     world_dict[item_country] = [item] 

country = raw_input('Country: ') 

response = world_dict.get(country) 
if response: 
    for item in response: 
     print item 
else: 
    print "Not a valid country" 
+0

정직하게 충분히 감사 할 수 없었다! 양해 해 주셔서 감사합니다. 코드는 훌륭하게 작동합니다! – ThatOnePythonNoob

+1

@ThatOnePythonNoob 당신은 대단히 환영합니다. 잘못된 국가 이름을 거부하도록 업데이트했습니다. 전에는 어려움에 대해 낙담하지 마십시오. 내가 말했듯이, 정확한 json 구조를 게시 했으므로 맨 아래 오른쪽에 잘못된 부분이 있고 맨 위에 잘못된 스 니펫이있는 것이 매우 쉽습니다. 이 코드가 문제를 해결했다면 다른 사람들이 여전히 대답하지 않는다고 생각하지 않도록 올바른 것으로 표시해 주시면 감사하겠습니다. – roganjosh

+0

'json_string'을 API 링크 (http://api.wunderground.com/api/a8c3e5ce8970ae66/conditions/q/London.json)로 변경 한 다음 문자열로 변환 할 수 있습니까? 프로그램이 여전히 작동합니까? – ThatOnePythonNoob

0
import json 

country = raw_input('Country: ') 

jsondata = "the large json string mentioned in your post" 

info = json.loads(jsondata) 

for item in info: 
    if item['country'] == country: 
     print item 
+0

정보 항목 [ 'results']'에 해당하지 않습니까? – roganjosh

+0

@ 존 고든, 그 말 그대로 인쇄 10000 라인 – ThatOnePythonNoob

+0

좋아, 그냥 원하는 정보로 제한 :'항목 '['이름 '], 항목 ['도시 '], 항목 ['상태 '] 등 ... 인쇄 항목 ' –

0

이 작업을 시도 할 수 있습니다. 코드에서 사용자 입력 오류를 고려할 수도 있습니다. 예 : str.strip() 및 대문자.

import json 
input_country = raw_input('Please enter country:') 
with open('London.json') as fp: 
    london_json = fp.read() 
    london = json.loads(london_json) 
    for item in london["response"]["results"]: 
     if item['country'] == input_country: 
      print json.dumps(item, indent = 2) 
+0

제안에 감사드립니다! 실행 중일 때 나는 현재 오류가 발생합니다 : IOError : [Errno 2] 해당 파일이나 디렉토리가 없습니다 : 'http://api.wunderground.com/api/a8c3e5ce8970ae66/conditions/q/London.json'어떤 아이디어? – ThatOnePythonNoob

+0

'open()'은 웹 URL이 아닌 로컬 파일에서만 작동합니다. –

관련 문제