qwweeeit wrote: > Hi all, > from a string embedding tabs I want to colorize them when expanded: > > # Starting from a string: > a= '1234\t5678\t\t90\nqwerty\nasdfg' > # which embeds both tabs and lfs > > # printing it you obtain: > print a > # 1234 5678 90 > # qwerty > # asdfg > > # print automatically expands tabs and interprets the NL. > > # to colorize the expanded tabs, I tried: > print a.replace('\t',"\033[41m\t\033[0m") # 41 = red color > # instead it works (in Linux) for the \n (substituted with a red > space): > print a.replace('\n',"\033[41m \033[0m\n") > > Can you help me? > Bye.
If all else fails you can colorize the tabs after converting them to spaces: def splititer(text, token): # A lazy iter(text.split(token)). # Probably not worth the effort. start = 0 while True: try: end = text.index(token, start) except ValueError: break yield text[start:end] start = end + len(token) yield text[start:] def colortabs(text, tabcolor, normcolor, tabwidth=8): parts = splititer(text, "\t") part = parts.next() pos = len(part) yield part for part in parts: width = tabwidth - pos % tabwidth yield tabcolor yield " " * width yield normcolor yield part pos += width + len(part) print "\t1234\t5678\t\t90".replace("\t", "\033[41m\t\033[0m") print "".join(colortabs("\t1234\t5678\t\t90", "\033[41m", "\033[0m")) Peter -- http://mail.python.org/mailman/listinfo/python-list