是否可以重构此脚本,使其作为完全独立的方法存在?
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()
我一直试图让它成为一个更大的过程的组成部分。
答案 0 :(得分: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)