2016-12-01 14 views
0

完全に独立したメソッドとして存在するようにこのスクリプトをリファクタリングすることは可能ですか?リファクタリングのPythonスクリプトを分離可能なメソッドに変換

import json 
import requests 
from collections import defaultdict 
from pprint import pprint 

def hasNumbers(inputString): 
    return any(char.isdigit() for char in inputString) 

# open up the output of 'data-processing.py' 
with open('job-numbers-by-location.txt') as data_file: 

    # print the output to a file 
    with open('phase_ii_output.txt', 'w') as output_file_: 
     for line in data_file: 
      identifier, name, coords, number_of_jobs = line.split("|") 
      coords = coords[1:-1] 
      lat, lng = coords.split(",") 
      # print("lat: " + lat, "lng: " + lng) 
      response = requests.get("http://api.geonames.org/countrySubdivisionJSON?lat="+lat+"&lng="+lng+"&username=s.matthew.english").json() 


      codes = response.get('codes', []) 
      for code in codes: 
       if code.get('type') == 'ISO3166-2': 
        country_code = '{}-{}'.format(response.get('countryCode', 'UNKNOWN'), code.get('code', 'UNKNOWN')) 
        if not hasNumbers(country_code): 
         # print("code: " + country_code + ", jobs: " + number_of_jobs) 
         output_file_.write("code: " + country_code + ", jobs: " + number_of_jobs) 
    output_file_.close() 

私はもっと大きなプロセスのコンポーネントとして組み込むことができるようにしています。

答えて

2

できることはいくつかあります。スクリプトの各ステップをそれぞれ独自の例外処理を持つ別々のメソッドに分割し、ジョブが失敗した場所を示すログを作成することもできます。また、ここではreturnパラメータについては言及していません。 True/Falseを返して、処理が成功/失敗したかどうかを示すことができます。

次に、process_fileメソッドを他の場所にインポートし、処理する必要がある2つのファイルを渡すことができます。

import json 
import requests 
from collections import defaultdict 
from pprint import pprint 

def hasNumbers(inputString): 
    return any(char.isdigit() for char in inputString) 

def handle_get(url, params) 
    try: 
     response = requests.get(url, params=urlencode(params)) 
    except requests.exceptions.RequestException as e: # This is the correct syntax 
     print e 
     # sys.exit(1) 
     response = None 

    return response 

def process_file(data_file_path, output_file_path) 
    # open up the output of 'data-processing.py' 
    with open(data_file_path) as data_file: 

     # print the output to a file 
     with open(output_file_path, 'w') as output_file_: 
      for line in data_file: 
       identifier, name, coords, number_of_jobs = line.split("|") 
       coords = coords[1:-1] 
       lat, lng = coords.split(",") 
       params = OrderedDict([('lat', lat), ('lng', lng), ('username', 's.matthew.english')]) 
       url = "http://api.geonames.org/countrySubdivisionJSON" 
       response = handle_get(url, params) 
       if response: 
        json_response = response.json() 
       else: 
        print('Something bad happened') 
        sys.exit(1) 


       codes = response.get('codes', []) 
       for code in codes: 
        if code.get('type') == 'ISO3166-2': 
         country_code = '{}-{}'.format(response.get('countryCode', 'UNKNOWN'), code.get('code', 'UNKNOWN')) 
         if not hasNumbers(country_code): 
          # print("code: " + country_code + ", jobs: " + number_of_jobs) 
          output_file_.write("code: " + country_code + ", jobs: " + number_of_jobs) 
+0

私は最終的には、[この事](http://stackoverflow.com/questions/40914419/parse-json-from-an-api-with-python-exception-handling-に組み込むしようとしています外科的抽出) –

関連する問題