Method to return the lowest filename number not being used
When you don't need indexes or ordering, it is generally a good idea to use a set over a list because its membership testing is more efficient.  That means, use nums = set() instead of nums = [], and use nums.add(...) instead of nums.append(...).  That's all you need to change.



I'm not sure why you are accessing the special method directly.  Why not use unicode(f) instead of f.__unicode__()?



Python has its own version of something that is often called a ternary operator.  Its format is truth_value if some_condition else false_value.  Therefore, you can replace your first if and else blocks with this:

nums.append(int(match[0]) if match else 0)


(It would be nums.add(...) if you decide to use a set.)

and your second if and else blocks with this:

return "" if i == 0 else str(i)