aboutsummaryrefslogtreecommitdiffstats
path: root/administrative-codes/csv2json
diff options
context:
space:
mode:
Diffstat (limited to 'administrative-codes/csv2json')
-rwxr-xr-xadministrative-codes/csv2json43
1 files changed, 43 insertions, 0 deletions
diff --git a/administrative-codes/csv2json b/administrative-codes/csv2json
new file mode 100755
index 0000000..7c22666
--- /dev/null
+++ b/administrative-codes/csv2json
@@ -0,0 +1,43 @@
+#!/usr/bin/python3
+
+#----------------------------------------------------------------------
+# Backend utilities for the Klimatanalys Norr project (compile county & municipality codes)
+# Copyright © 2024 Guilhem Moulin <info@guilhem.se>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#----------------------------------------------------------------------
+
+import sys
+import csv
+from pathlib import Path
+import json
+
+basedir = Path(sys.argv[0]).parent
+data = {}
+def readCSV(path):
+ with open(path, mode='r', newline='') as fp:
+ reader = csv.DictReader(fp, delimiter='\t', dialect='unix')
+ for row in reader:
+ code = row['Code']
+ if code in data:
+ raise Exception(f'Duplicate code {code}')
+ data[code] = row['Name']
+
+# The source (SCB) lists all codes in same file: they differ only in
+# length (2 digits for counties, 4 digits for municipalities) so it
+# doesn't hurt to merge them back in a single JSON dictionary. Also
+# having a single file simplifies the client-side logic.
+for path in sys.argv[1:]:
+ readCSV(path)
+json.dump(data, sys.stdout, ensure_ascii=False, sort_keys=True, separators=(',', ':'))