Tom Plunket wrote: > CakeProphet wrote: > > >> Hmmm... a quick fix might be to temporarily replace all tab characters >> with another, relatively unused control character. >> >> MyString = MyString.replace("\t", chr(1)) >> MyString = textwrap.dedent(MyString) >> MyString = MyString.replace(chr(1), "\t") >> >> Of course... this isn't exactly safe, but it's not going to be fatal, >> if it does mess something up. As long as you don't expect receiving any >> ASCII 1 characters. >> > > Well, there is that small problem that there are leading tabs that I > want stripped. I guess I could manually replace all tabs with eight > spaces (as opposed to 'correct' tab stops), and then replace them when > done, but it's probably just as easy to write a non-destructive dedent. > > It's not that I don't understand /why/ it does it; indeed I'm sure it > does this so you can mix tabs and spaces in Python source. Why anyone > would intentionally do that, though, I'm not sure. ;) > > -tom! > > This should do the trick:
>>> Dedent = re.compile ('^\s+') >>> for line in lines: print Dedent.sub ('', line) Frederic ----------------------------------------------------------------------- Testing: >>> text = s = ''' # Dedent demo No indent Three space indent \tOne tab indent \t\tThree space, two tab indent \t \tOne tab, two space, one tab indent with two tabs here >\t\t<''' >>> print text print s # Dedent demo No indent Three space indent One tab indent Three space - two tab indent One tab - two spaces - one tab indent with two tabs here > < >>> for line in text.splitlines (): print Dedent.sub ('', line) # Dedent demo No indent Three space indent One tab indent Three space - two tab indent One tab - two spaces - one tab indent with two tabs here > < ----------------------------------------------------------------------- -- http://mail.python.org/mailman/listinfo/python-list