Yanıtlar:
Bunu aşağıdakilerle yapabilirsiniz str.ljust(width[, fillchar])
:
Uzunluk genişliğinde bir dizede iki yana yaslanmış sola döndür . Dolgu, belirtilen dolgu şeması kullanılarak yapılır (varsayılan boşluktur). Genişlik küçükse orijinal dize döndürülür
len(s)
.
>>> 'hi'.ljust(10)
'hi '
Komplike dize biçimlendirirken, muhtemelen kullanmalısınız bile çalışır esnek bir yöntem için dize biçimlendirme mini dili kullanarak, str.format()
yöntem
>>> '{0: <16} StackOverflow!'.format('Hi') # Python >=2.6
'Hi StackOverflow!'
bir f-dizeleri
>>> f'{"Hi": <16} StackOverflow!' # Python >= 3.6
'Hi StackOverflow!'
'{message: <{fill}}'.format(message='Hi', fill='16')
str.format()
Yalnızca tek {...}
ve başka hiçbir şeye sahip şablonlar için kullanmayın . Sadece kullanmak format()
işlevi ve havai ayrıştırma kendini kurtar: format('Hi', '<16')
.
Yeni (ish) dize biçimi yöntemi , yuvalanmış anahtar kelime bağımsız değişkenleriyle bazı eğlenceli şeyler yapmanızı sağlar. En basit durum:
>>> '{message: <16}'.format(message='Hi')
'Hi '
16
Değişken olarak geçmek istiyorsanız :
>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi '
Tüm kit ve kaboodle için değişkenleri geçmek istiyorsanız :
'{message:{fill}{align}{width}}'.format(
message='Hi',
fill=' ',
align='<',
width=16,
)
Hangi sonuçlar (tahmin ettiniz):
'Hi '
Bunu deneyebilirsiniz:
print "'%-100s'" % 'hi'
"'%+100s'" % 'hi'
sağındaki boşlukları koymak için çalışacak'hi'
Bunu yapmanın doğru yolu, Python'un biçim sözdizimini resmi belgelerde açıklandığı gibi kullanmak olacaktır.
Bu durumda sadece şöyle olur:
'{:10}'.format('hi')
hangi çıktılar:
'hi '
Açıklama:
format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= integer
precision ::= integer
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
Bilmeniz gereken hemen hemen hepsi orada ^.
Güncelleme: Python 3.6'dan itibaren gerçek dize enterpolasyonu ile daha da kullanışlı!
foo = 'foobar'
print(f'{foo:10} is great!')
# foobar is great!
Kullanım str.ljust()
:
>>> 'Hi'.ljust(6)
'Hi '
Ayrıca düşünmelisiniz string.zfill()
, str.ljust()
ve str.center()
dize biçimlendirmesi için. Bunlar zincirlenebilir ve ' dolgu ' karakteri belirtilebilir, böylece:
>>> ('3'.zfill(8) + 'blind'.rjust(8) + 'mice'.ljust(8, '.')).center(40)
' 00000003 blindmice.... '
Bu dize biçimlendirme işlemleri , Python v2 ve v3'te çalışma avantajına sahiptir.
Bir ara bir bakın pydoc str
: İçinde iyi şeyler var.
Python 3.6'dan itibaren
>>> strng = 'hi'
>>> f'{strng: <10}'
ile değişmez dize enterpolasyon .
Veya, dolgu boyutunuz böyle bir değişkende ise (teşekkürler @Matt M.!):
>>> to_pad = 10
>>> f'{strng: <{to_pad}}'
f'{strng: >10}'
dizeyi 10 boşluk uzunluğuna kadar doldurmak için. Bu sihir. Ve iyi belgelenmemiş.
f'{strng:10}'
.
Dizeler için Python 2.7'nin mini biçimlendirmesini kullanın :
'{0: <8}'.format('123')
Bu sol hizalanır ve '' karakteriyle 8 karaktere kadar doldurulur.
Sadece 0'ı kaldırın, bunun yerine boşluk ekleyeceksiniz:
>>> print "'%6d'"%4
Dilimleme kullanmak daha pitonik olmaz mı?
Örneğin, sağda boşlukları olan bir dizeyi 10 karakter uzunluğa kadar doldurmak için:
>>> x = "string"
>>> (x + " " * 10)[:10]
'string '
Soldaki boşluklarla 15 karakter uzunluğa kadar doldurmak için:
>>> (" " * 15 + x)[-15:]
' string'
Elbette ne kadar süre ped yapmak istediğinizi bilmenizi gerektirir, ancak başlamakta olduğunuz dizenin uzunluğunu ölçmeyi gerektirmez.
''.join(reversed(str))
daha pythonic olduğunu str[::-1]
ve biz doğru değil bütün biliyorum.
(x + " " * 10)[:10]
bence kullanmaktan çok daha kıvrımlı x.ljust(10)
.
Çeşitli baskı biçimlerinin yerine kullanmak için güzel bir numara:
(1) Sağda boşluk olan ped:
('hi' + ' ')[:8]
(2) Solda önde sıfır bulunan ped:
('0000' + str(2))[-4:]
min_len = 8
o zaman ('hi' + ' '*min_len)[:min_len]
veya('0'*min_len + str(2))[-min_len]
('0'*min_len + str(2))[-min_len:]
sadece eğlence için olsa da , daha iyi olurdu ve diğer cevapları tavsiye ederim.
Liste kavrayışını kullanarak bunu yapabilirsiniz, bu size alanların sayısı hakkında bir fikir verecektir ve tek bir astar olacaktır.
"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello '
s = "hi"
; s + (6-len(s)) * " "
bunun yerine (ne zaman tamam Ancak sonuç, sorunu çözen herhangi bir çerçeve özelliğini kullanan cevapların bakımı daha kolay olacaktır (diğer yanıtlara bakın)
"%-6s" % s
sola hizalanmış ve"%6s" % s
sağa hizalanmış.