Wikipedia:Projekt Fredrika/kommun.py
Utseende
#!/usr/bin/env python # -*- coding: utf-8 -*- import codecs import csv import sys from math import sqrt, sin, cos, asin, radians def distance(lat1, lon1, lat2, lon2): """in km using haversine formula""" # convert decimal degrees to radians lat1, lon1, lat2, lon2 = map(radians, [lat1, lon1, lat2, lon2]) # haversine formula d_lat = lat2 - lat1 d_lon = lon2 - lon1 a = sin(d_lat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(d_lon / 2) ** 2 c = 2 * asin(sqrt(a)) # 6367 km is the radius of the Earth km = 6367 * c return km article_file = "Oar_i_Pargas.csv" reference_file = "stodpunkter.csv" output_file = "svar_kommuner.csv" with codecs.open(article_file, 'r') as f: articles = csv.reader(f) article_list = list(articles) with codecs.open(reference_file, 'r') as f: references = csv.reader(f) reference_list = list(references) output_list = [] for row in article_list: article, a_lat, a_lon, a_name, a_area, a_length, a_direction, a_kommun, a_district = row a_lat = float(a_lat) a_lon = float(a_lon) closest_dist = 99999 closest_kommun = "" closest_n1 = "" for ref in reference_list: n1, n2, r_lat, r_lon, kommun = ref r_lat = float(r_lat) r_lon = float(r_lon) dist = distance(a_lat, a_lon, r_lat, r_lon) if dist < closest_dist: closest_dist = dist closest_kommun = kommun closest_n1 = n1 no_parenthesis = article.split("(")[0].strip() dist_fmt = "%0.1f" % closest_dist new_name = "" new_name2 = "" if article != no_parenthesis: new_name = no_parenthesis + ", " + closest_kommun new_name2 = no_parenthesis + " (ö nära " + closest_n1 + " i " + closest_kommun + ")" output_list.append([article, a_lat, a_lon, closest_kommun, a_area, a_length, a_name, closest_n1, dist_fmt, new_name, new_name2]) with codecs.open(output_file, 'w') as rf: wr = csv.writer(rf, dialect='excel') wr.writerows(output_list) print("Wrote %s rows into %s" % (len(output_list), output_file))