Chcę wypełnić ciąg spacjami. Wiem, że następujące działania są zerowe:
>>> print "'%06d'"%4
'000004'
Ale co powinienem zrobić, kiedy tego chcę ?:
'hi '
Oczywiście mogę zmierzyć długość łańcucha i zrobić str+" "*leftover
, ale chciałbym najkrótszą drogę.
python
string
string-formatting
pad
stożek
źródło
źródło
"%-6s" % s
do wyrównania do lewej i wyrównania"%6s" % s
do prawej.Odpowiedzi:
Możesz to zrobić za pomocą
str.ljust(width[, fillchar])
:źródło
Aby uzyskać elastyczną metodę, która działa nawet podczas formatowania skomplikowanego łańcucha, prawdopodobnie powinieneś użyć mini-języka formatującego łańcuch , używając jednej z
str.format()
metodz f-łańcuchów
źródło
'{message: <{fill}}'.format(message='Hi', fill='16')
str.format()
dla szablonów zawierających tylko jeden{...}
i nic więcej. Wystarczy skorzystać zformat()
funkcji i oszczędzić sobie parsowania napowietrznych:format('Hi', '<16')
.Nowa metoda formatowania łańcucha znaków (ish) pozwala robić zabawne rzeczy z zagnieżdżonymi argumentami słów kluczowych. Najprostszy przypadek:
Jeśli chcesz przekazać
16
jako zmienną:Jeśli chcesz przekazać zmienne dla całego zestawu i kaboodle :
Które wyniki w (zgadłeś):
źródło
Możesz spróbować:
źródło
"'%+100s'" % 'hi'
będzie działać na umieszczenie spacji po prawej stronie'hi'
Prawidłowym sposobem na to byłoby użycie składni formatu Pythona, jak opisano w oficjalnej dokumentacji
W tym przypadku byłoby to po prostu:
'{:10}'.format('hi')
które dane wyjściowe:
'hi '
Wyjaśnienie:
Jest tam prawie wszystko, co musisz wiedzieć ^.
Aktualizacja: od Pythona 3.6 jest jeszcze wygodniejsza z interpolacją ciągów literalnych!
źródło
Użyj
str.ljust()
:Należy również rozważyć
string.zfill()
,str.ljust()
astr.center()
do formatowania strun. Można je łączyć w łańcuchy i mieć znak „ wypełnienia ”, a zatem:Te operacje formatowania łańcuchaZaletą jest praca w Pythonie v2 i v3.
Spójrz
pydoc str
kiedyś: jest tam mnóstwo dobrych rzeczy.źródło
Od wersji Python 3.6 możesz to zrobić
z dosłowną interpolacją ciągów znaków .
Lub, jeśli twój rozmiar wypełnienia jest w zmiennej, taki jak ten (dzięki @Matt M.!):
źródło
f'{strng: >10}'
do wypełniania łańcucha wiodącymi białymi spacjami do długości 10. To magia. I nie jest to dobrze udokumentowane.f'{strng:10}'
.możesz również wyśrodkować ciąg:
źródło
Użyj mini formatowania Python 2.7 dla ciągów :
To pozostawia wyrównanie i dopełnia do 8 znaków ze znakiem „”.
źródło
Wystarczy usunąć 0, a zamiast tego doda miejsce:
źródło
Czy nie byłoby bardziej pytoniczne stosowanie krojenia?
Na przykład, aby wstawić ciąg znaków ze spacjami po prawej stronie, aż będzie miał 10 znaków:
Aby uzupełnić go spacjami po lewej stronie, aż będzie miał 15 znaków:
Wymaga to oczywiście wiedzy, jak długo chcesz uzupełniać, ale nie wymaga mierzenia długości łańcucha, od którego zaczynasz.
źródło
''.join(reversed(str))
bardziej pytoniczne niżstr[::-1]
i wszyscy wiemy, że to nieprawda.(x + " " * 10)[:10]
moim zdaniem jest znacznie bardziej skomplikowany niż używaniex.ljust(10)
.Fajna sztuczka, którą można zastosować zamiast różnych formatów wydruku:
(1) Pad ze spacjami po prawej:
(2) Pad z wiodącymi zerami po lewej stronie:
źródło
min_len = 8
wtedy('hi' + ' '*min_len)[:min_len]
lub('0'*min_len + str(2))[-min_len]
('0'*min_len + str(2))[-min_len:]
raczej, choć jest to tylko dla zabawy i polecam inne odpowiedzi.Mógłbyś to zrobić przy użyciu listowania, to dałoby ci wyobrażenie o liczbie spacji i byłby to jeden linijka.
źródło
s = "hi"
;s + (6-len(s)) * " "
zamiast tego (jest OK, kiedy wynik jest negatywny). Jednak odpowiedzi, które wykorzystują jakąkolwiek funkcję frameworku, która rozwiązuje konkretny problem, będą łatwiejsze do utrzymania (zobacz inne odpowiedzi)