Так, как я мог получить координаты и население города (перенести их в список), называя названия городов, которые уже созданы? - PullRequest
0 голосов
/ 23 марта 2012

Итак, это упрощенная версия файла данных:

Wichita, KS[3769,9734]279835
308 1002 1270 1068 1344 1360 1220 944 1192 748 1618 1774 416 1054

Wheeling, WV[4007,8072]43070
1017 1247 269 255 1513 327 589 203 1311 416 627 605 2442 998 85

West Palm Beach, FL[2672,8005]63305
1167 1550 1432 965 1249 2375 1160 718 1048 2175 760 1515 1459 3280 1794 1252

Wenatchee, WA[4742,12032]17257
3250 2390 1783 1948 2487 2595 1009 2697 2904 2589 1394 2690 1765 2912 117 1461
2358

Weed, CA[4142,12239]2879
622 3229 2678 1842 1850 2717 2898 1473 2981 3128 2880 1858 2935 2213 3213 505
1752 2659

Waycross, GA[3122,8235]19371
2947 2890 360 820 1192 1097 605 904 2015 828 386 703 1815 413 1155 1127
2920 1434 899

Wausau, WI[4496,8964]32426
1240 2198 1725 1600 708 841 1138 805 913 848 1015 1222 907 646 1008 111
1230 1777 509 676

Waukegan, IL[4236,8783]67653
244 1000 2260 1933 1360 468 757 1023 565 673 1056 775 982 667 854 768
170 990 1985 551 436

Watertown, SD[4490,9711]15649
601 393 1549 1824 1351 1909 1058 572 880 1155 1263 534 1365 1572 1257 394
1358 433 1580 1403 156 1026

В настоящее время я могу разделить название города и штата из строки.Как я могу получить координаты города, позвонив по названию города.Как я могу получить население города, называя названия городов?[x,y] - это координаты, а число после [] - это численность населения.

А вот код, который у меня есть:

fin = open("miles.txt","r")
cities=[]
for line in fin:
    A=line.split()
    if A[0][0] not in '0123456789':
        B= A[0] + A[1][0]+ A[1][1]   
        cities.append[B]
print cities

Спасибо!Любая помощь будет оценена!

1 Ответ

1 голос
/ 23 марта 2012
def parse_cities(fin):
    cities = {}
    distances = {}
    order = []
    index = 0
    valid_city = False
    for line in fin:
        if '[' in line:  # city line
            # .partition() will always return three strings
            citystate, left, rest = line.partition('[')
            coordinates, right, population = rest.partition(']')
            lat, comma, lng = coordinates.partition(',')

            # drop any surrounding whitespace
            citystate = citystate.strip()
            lat = lat.strip()
            lng = lng.strip()
            population = population.strip()

            # validity check
            valid_city = (
                # delimiters must exist
                left and right and comma and
                # numbers must be valid
                lat.isdigit() and lng.isdigit() and population.isdigit()
            )

            if not valid_city: continue

            order.append(citystate)
            cities[citystate] = (int(lat), int(lng), int(population))
            index = 0
        elif line and line[0].isdigit() and valid_city:  # distance line
            # citystate variable from previous iteration
            # index variable will be reset for each new city,
            #     but otherwise increase between the lines
            for dist in [int(w) for w in line.split()]:
                if index >= len(order): break
                citystate2 = order[index]
                distances[citystate,citystate2] = dist
                distances[citystate2,citystate] = dist
                index += 1
    return cities, distances
with open("miles.txt","r") as fin:
    cities, distances = parse_cities(fin)
print cities['Waycross, GA'] # (3122, 8235, 19371)
print distances['Youngstown, OH', 'Yakima, WA'] # 1513
...