Ну, так как данные, которые вы опубликовали, показывают только двухбуквенный почтовый индекс после ,
разделителя, я бы:
city, state = line.split(', ')
state = state[:2]
return (city, state)
Если у вас есть данные, которые не являются двухбуквенным почтовым индексом, я бы искал ожидаемый [
символ:
city, state = line.split(', ')
state = state[:state.index('[')
return (city, state)
Чтобы получить население, вам нужно составить словарь статистики, которую вы хотите сохранить.
И да, я знаю, это ужасно:
fin = open ("miles.txt","r")
stats={}
for line in fin:
if line[0].isalpha(): #its got a city, state, x, y and pop stat to keep
city, state = line.split(', ')
state = state[ :state.index('[') ]
#get the two elements around the commas within the square brackets
lat, lng = line[ line.index('[') +1 : line.index(']') ].split(',')
#get the element after the last right bracket
pop = line[line.index(']') +1 :]
stats.update( {(city, state): (lat, lng, pop)} )
return stats
Оттуда вы сможете поиграть с stats
из вашего текстового файла.
Просто убедитесь, что у вас нет ключевых столкновений ... у вас есть кортеж в качестве уникального связующего элемента для вашей статистики ... Имейте в виду, что вы не захотите получать данные из города name (существует более одного Springfield), но вместо этого ищите статистику для ключа, соответствующего (city, state)
. Возвращаемым value
будет статистика по x, y и населению, которая была у вас в этой строке.
>>> stats.get(('Waukegan, IL'))
(4236, 8783, 67653)
>>> stats.get(('Waukegan, IL'))[-1]
67653