in need of some sorting help

Ben Cartwright bencvt at gmail.com
Thu Mar 2 18:48:56 EST 2006


ianaré wrote:
> However, i need the sorting done after the walk, due to the way the
> application works... should have specified that, sorry.


If your desired output is just a sorted list of files, there is no good
reason that you shouldn't be able sort in place.  Unless your app is
doing something extremely funky, in which case this should do it:

    root = self.path.GetValue()  # wx.TextCtrl input
    filter = self.fileType.GetValue().lower()  # wx.TextCtrl input
    not_type = self.not_type.GetValue()  # wx.CheckBox input

    matched_paths = {}
    for base, dirs, walk_files in os.walk(root):
        main.Update()
        # i only need the part of the filename after the
        # user selected path:
        base = base.replace(root, '')

        matched_paths[base] = []
        for entry in walk_files:
            entry = os.path.join(base, entry)
            if not filter:
                match = True
            else:
                match = filter in entry.lower()
                if not_type:
                    match = not match
            if match:
                matched_paths[base].append(entry)

    def tolower(x): return x.lower()
    files = []
    # Combine into flat list, first sorting on base path, then full
path
    for base in sorted(matched_paths, key=tolower):
        files.extend(sorted(matched_paths[base], key=tolower))

--Ben




More information about the Python-list mailing list