expandtabs方法可以将制表符转换为一定数目的空格,默认情况下指标宽度为8.
将一定数目空格转换为制表符,反扩展:
def unexpand(astring, tablen=8):
import re
# 切分成空格和非空格的序列
pieces = re.split(r'(+)', astring.expandtabs(tablen))
# 记录目前的字符串总长度
lensofar = 0
for i, piece in enumerate(pieces):
thislen = len(piece)
lensofar += thislen
if piece.isspace():
# 将各个空格序列改成tabs+spaces
numblanks = lensofar % tablen
numtabs = (thislen-numblanks+tablen-1)/tablen
pieces[i] = '\t'*numtabs + ' '*numblanks
return ''.join(pieces)
unexpand处理单行字符串,如果需处理多行字符串用''.join([unexpand(s) for s in astring.splitlines(True)])