-6

I am new to python and have a hopefully simple question. I have a txt file with road names and lengths. i.e. Main street 56 miles. I am stumped on how to call on that file in Python and sort all the road lengths in ascending order. Thanks for your help.

  • Dupe http://stackoverflow.com/questions/25690851/python-sorting-in-ascending-order-in-a-txt-file – therealprashant May 31 '15 at 18:57
  • https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files, https://docs.python.org/3/library/functions.html#sorted – MattDMo May 31 '15 at 19:00
  • possible duplicate of [Sort a Python dictionary by value](http://stackoverflow.com/questions/613183/sort-a-python-dictionary-by-value) – ScaisEdge May 31 '15 at 19:07

1 Answers1

0

Let's assume that there is a "miles" after every number. (This is an untested code so you can get it edited but I think the idea is right).

EDIT: THIS IS TESTED

import collections
originaldict = {}
newdict = collections.OrderedDict()

def isnum(string):
    try:
        if string is ".":
            return True
        float(string)
        return True

    except Exception:
        return False

for line in open(input_file, "r"):
    string = line[:line.find("miles") - 1]
    print string
    curnum = ""
    for c in reversed(string):
        if not isnum(c):
            break
        curnum = c + curnum
    originaldict[float(curnum)] = []
    originaldict[float(curnum)].append(line)


for num in sorted(originaldict.iterkeys()):
    newdict[num] = []
    newdict[num].append(originaldict[num][0])
    del originaldict[num][0]


with open(output_file, "a") as o:
    for value in newdict.values():
        for line in value:
            o.write(line + "\n")
rassa45
  • 3,482
  • 1
  • 29
  • 43
  • If you understand what this code is doing, you should try to find a quicker way to do this by using SortedDict(). It would get of the last for loop. – rassa45 May 31 '15 at 19:48