2016-03-21 11 views
0

Dizeleri belirli bir uzunluğa (yani, terminal genişliği) nasıl keseceğinize dair bir fikriniz var mı, ancak sekmeler gibi özel "geniş" karakterler dikkate alındığında bir fikir mi var?Dizgiyi terminal genişliğine sığdırın, ancak TAB gibi geniş karakterleri hesaba katın

Ben bu satırları var, line bir bayt dizedir ve max_width ila 132 değerlendirilir:

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])) 

Ve bir örnek çıktı bu olacaktır:

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

Yani Python3 sadece sanıyor 132 karakter, ancak terminal (gnome-terminal Ubuntu 15.10), wc'a göre 293 karaktere çevirir.

Satırı doğru şekilde nasıl kesebilirim, böylece bir terminal sırasına sığar mı?

+0

Bir TAB karakteri için kullanılacak boşluk sayısı terminal/uygulama/kullanıcıya kadar. Bu yüzden hizalama için sekme kullanmazsınız. Onları boşluklara dönüştür. –

+0

Dizgiyi kesmeden önce tüm "geniş" karakterleri sabit sayıda boşlukla değiştirebilir miyim? TAB'tan başka hangi karakterleri ben halledeyim? (ör. satır besleme veya satır başı-dönüş veya herhangi bir şekilde) Bunları bir kerede halletmenin en basit yolu ne olurdu? –

cevap

0

Şimdi her dizeyi yeniden yapıyorum ve basılmamış tüm karakterleri atladım.
Bu muhtemelen en hızlı yöntem değildir, ancak çalışır.

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) 
İlgili konular