将字符串调整为终端宽度,但要考虑像TAB这样的宽字符

时间:2016-03-21 11:34:08

标签: string python-3.x truncate

您是否知道如何将字符串剪裁到特定长度(即终端宽度),但是考虑使用特殊的“宽”字符(如标签)?

我有这些行,line是一个字节字符串,max_width被评估为132:

max_width = shutil.get_terminal_size().columns
output = "{:>6d}: {}".format(n, line.decode(codec, "replace")).rstrip("\n")
print(output[:max_width])
print(len(output[:max_width]))

示例输出将是:

    23: ��G&S��.��+��HL=`����W9�yi��l�����p����:��d*p��i�6L�h<��
v�I��S�� �u�`:%��#                                               ��/����TAE����{�(y�Ij��B����33o3
132

所以Python3认为它只有132个字符,但根据gnome-terminal,终端(Ubuntu 15.10上的wc)将其解释为293个字符。

如何正确截断线,使其适合一个终端行?

1 个答案:

答案 0 :(得分:0)

我现在重新构造每个字符串,只是省略所有不可打印的字符 这可能不是最快的方法,但它有效。

output = line.decode(codec, "replace")
if max_width:
    output = "".join(c for c in output if c.isprintable())
    print(output[:max_width])
else:
    print(output)