У меня есть файл .yaml
(params
), в котором содержится словарь имен
country_names:
country_1: Wales
country_2: England
country_3: Scotland
country_4:
Как видите, country_4 оставлено пустым. Это намеренно. В интересах масштабируемости и удобства для пользователя я хочу иметь возможность запускать сценарий с известным максимальным количеством названий стран (т.е. 4), но с неизвестным числом значений стран. Я также не хочу жестко кодировать скрипт каждый раз, когда кто-то вносит изменения в yaml.
import dictor
import geopandas as gpd
import pandas as pd
import yaml
country_1 = dictor(params, 'country_names.country_1')
if country_1 is None:
del country_1
else:
country_1_path = path_to_dir + '/' + country_1 + '.geojson'
country_1 = gpd.read_file(country_1)
country_2 = dictor(params, 'country_names.country_2')
if country_2 is None:
del country_2
else:
country_2_path = path_to_dir + '/' + country_2 + '.geojson'
country_2 = gpd.read_file(country_2)
country_3 = dictor(params, 'country_names.country_3')
if country_3 is None:
del country_3
else:
country_3_path = path_to_dir + '/' + country_3 + '.geojson'
country_3 = gpd.read_file(country_3)
country_4 = dictor(params, 'country_names.country_4')
if country_4 is None:
del country_4
else:
country_4_path = path_to_dir + '/' + country_4 + '.geojson'
country_4 = gpd.read_file(country_4)
и затем я объединяю переменные страны, которые были получены выше ...
try:
countries = pd.concat([country_1, country_2, country_3, country_4])
except:
pass
try:
countries = pd.concat([country_1, country_2, country_3])
except:
pass
try:
countries = pd.concat([country_1, country_2])
except:
pass
Скрипт делает то, что я хочу, и не падает. Однако, как вы можете видеть, количество LO C довольно велико, и оно довольно грязное. Есть ли более эффективный или Pythoni c способ сделать это, сохраняя вещи явными, а не неявными? Также я рад за другие предложения, например, если я неправильно использую except
и pass
.
* Я также рад изменить название вопроса, если у кого-то есть предложения.