你知道如何将字符串修剪到特定的长度(即终端宽度),但要考虑到像制表符这样的特殊“宽”字符吗?
我有以下几行代码,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根据wc的说法,Python3认为它只有132个字符,但终端(Ubuntu15.10上的gnome-terminal)将其解释为293个字符。
我如何才能正确地截断这条线,使其适合一个端子行?
发布于 2016-03-21 20:28:20
我现在确实重新构造了每个字符串,并简单地省略了所有不可打印的字符。
这可能不是最快的方法,但它是有效的。
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)https://stackoverflow.com/questions/36129959
复制相似问题