Whenever there is a library that can be used for a task you want to do, people tend to use it, arguing that the creators of the library certainly know best how to tackle that problem. Generally, this is not a bad idea—provided you use the library for the task it was designed for.
I recently had to deal with an abuse of textwrap.wrap to break a string in equal-sized chunks. This works, as the string in question had no white space and was considered a single word; textwrap.wrap happily breaks words longer than a single line (unless you tell it, it shouldn't) in chunks of line length. However, it is a rare use case when wrapping actual text (show me a language that frequently uses words with more than a few hundred letters). So it doesn't matter that the algorithm has quadratic run time here. (In case you wonder in the example below: yes, I've written some Haskell recently, so the print is to prove that the value is actually computed.)
$ cat wrap.py #!/usr/bin/env python import sys import textwrap def wrap(count): word = "x" * int(count) wrapped = textwrap.wrap(word, width=64) for line in wrapped: print line if __name__ == "__main__": wrap(sys.argv[1]) $ for count in `seq 6800 6800 34000`; do time ./wrap.py $count > /dev/null; done real 0m1.134s user 0m1.120s sys 0m0.008s real 0m4.480s user 0m4.472s sys 0m0.008s real 0m8.933s user 0m8.917s sys 0m0.016s real 0m17.602s user 0m17.602s sys 0m0.000s real 0m26.674s user 0m26.658s sys 0m0.016s $
$ cat wrap.py #!/usr/bin/env python import sys import textwrap def wrap(count): word = "x" * int(count) wrapped = [] idx = 0 lenword = len(word) while idx < lenword: wrapped.append(word[idx:idx+64]) idx += 64 for line in wrapped: print line if __name__ == "__main__": wrap(sys.argv[1]) $ for count in `seq 6800 6800 34000`; do time ./wrap.py $count > /dev/null; done real 0m0.055s user 0m0.034s sys 0m0.016s real 0m0.051s user 0m0.027s sys 0m0.024s real 0m0.047s user 0m0.039s sys 0m0.008s real 0m0.049s user 0m0.025s sys 0m0.024s real 0m0.048s user 0m0.024s sys 0m0.024s $
$ cat ./wrap.py #!/usr/bin/env python import sys import textwrap def wrap(count): text = "foo bar " * int(count) wrapped = textwrap.wrap(text, width=64) for line in wrapped: print line if __name__ == "__main__": wrap(sys.argv[1]) $ time ./wrap.py 34000 > /dev/null real 0m0.350s user 0m0.334s sys 0m0.016s $ time ./wrap.py 100000 > /dev/null real 0m0.820s user 0m0.788s sys 0m0.032s $ time ./wrap.py 1000000 > /dev/null real 0m6.239s user 0m6.050s sys 0m0.189s $