2014-06-06 13 views
27

Jak przyciąć łańcuch za pomocą str.format w języku Python? Czy to możliwe?Jak przyciąć łańcuch za pomocą str.format w Pythonie?

Jest to parametr width wymienione w Format Specification Mini-Language:

format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type] 
... 
width  ::= integer 
... 

Ale określając go pozornie działa tylko dla obicia, nie obcinając:

>>> '{:5}'.format('aaa') 
'aaa ' 
>>> '{:5}'.format('aaabbbccc') 
'aaabbbccc' 

Więc to raczej minimalna szerokość niż szerokość naprawdę.

Wiem, że mogę podzielić ciągi znaków, ale dane, które tu przetwarzam, są całkowicie dynamiczne, łącznie z ciągiem formatów i argumentami, które wchodzą. Nie mogę tak po prostu przejść i wyraźnie wyciąć jeden.

Odpowiedz

48

Zastosowanie .precision zamiast:

>>> '{:.5}'.format('aaabbbccc') 
'aaabb' 

Według dokumentacji Format Specification Mini-Language:

precyzja jest liczbą dziesiętną wskazujący ile cyfry powinny być wyświetlane po przecinku dotyczący wartość zmiennoprzecinkowa sformatowana za pomocą 'f' i 'F' lub przed i po kropce dziesiętnej dla wartości zmiennoprzecinkowej sformatowanej za pomocą 'g' lub 'G'. W przypadku typów nielicznych pole wskazuje maksymalny rozmiar pola - innymi słowy, ile znaków zostanie wykorzystanych z treści pola. Prefiks precyzja nie jest dozwolona dla wartości całkowitych.

+0

Ah, jakoś to przeoczyłem. To działa, dziękuję! Akceptuj przychodzące. – famousgarkin

+0

Czy jest wbudowany również do wyświetlania znaków skracania? Podobnie jak sufiks elipsy, gdy dane są przycinane w taki sposób? – ThorSummoner

+0

@ThorSummoner, myślę, że powinieneś zrobić to ręcznie. – falsetru

Powiązane problemy