Saya ingin mengisi string dengan spasi. Saya tahu bahwa yang berikut ini berfungsi untuk nol:
>>> print "'%06d'"%4
'000004'
Tetapi apa yang harus saya lakukan ketika saya menginginkan ini ?:
'hi '
tentu saja saya bisa mengukur panjang string dan melakukan str+" "*leftover
, tetapi saya ingin cara terpendek.
python
string
string-formatting
pad
lancip
sumber
sumber
"%-6s" % s
untuk rata kiri dan"%6s" % s
kanan kanan.Jawaban:
Anda dapat melakukan ini dengan
str.ljust(width[, fillchar])
:sumber
Untuk metode fleksibel yang berfungsi bahkan ketika memformat string yang rumit, Anda mungkin harus menggunakan bahasa mini pemformatan string , menggunakan salah satu
str.format()
metodedari f-string
sumber
'{message: <{fill}}'.format(message='Hi', fill='16')
str.format()
untuk templat dengan hanya satu{...}
dan tidak ada yang lain. Hanya menggunakanformat()
fungsi dan menyelamatkan diri parsing overhead:format('Hi', '<16')
.Metode format string baru (ish) memungkinkan Anda melakukan beberapa hal menyenangkan dengan argumen kata kunci bersarang. Kasus paling sederhana:
Jika Anda ingin meneruskan
16
sebagai variabel:Jika Anda ingin memasukkan variabel untuk keseluruhan kit dan kaboodle :
Yang menghasilkan (Anda dapat menebaknya):
sumber
Anda dapat mencoba ini:
sumber
"'%+100s'" % 'hi'
akan bekerja untuk menempatkan ruang di sebelah kanan'hi'
Cara yang benar untuk melakukan ini adalah dengan menggunakan sintaks format Python seperti yang dijelaskan dalam dokumentasi resmi
Untuk kasus ini, ia hanya akan:
'{:10}'.format('hi')
output mana:
'hi '
Penjelasan:
Cukup banyak yang perlu Anda ketahui ada di sana ^.
Pembaruan: pada python 3.6 bahkan lebih nyaman dengan interpolasi string literal!
sumber
Gunakan
str.ljust()
:Anda juga harus mempertimbangkan
string.zfill()
,str.ljust()
danstr.center()
untuk memformat string. Ini dapat dirantai dan memiliki karakter ' isi ' yang ditentukan, dengan demikian:Operasi pemformatan string ini memiliki keuntungan bekerja di Python v2 dan v3.
Lihatlah
pydoc str
kapan-kapan: ada banyak barang bagus di sana.sumber
Pada Python 3.6 Anda bisa melakukannya
dengan interpolasi string literal .
Atau, jika ukuran lapisan dalam variabel, seperti ini (terima kasih @Matt M.!):
sumber
f'{strng: >10}'
untuk mengisi string dengan spasi putih terdepan hingga 10. Itu sihir. Dan itu tidak didokumentasikan dengan baik.f'{strng:10}'
.Anda juga dapat memusatkan string Anda:
sumber
Gunakan format mini Python 2.7 untuk string :
Ini menyejajarkan kiri, dan bantalan untuk 8 karakter dengan karakter ''.
sumber
Hapus saja 0 dan itu akan menambah ruang sebagai gantinya:
sumber
Bukankah lebih pythonic untuk menggunakan slicing?
Misalnya, untuk memasang string dengan spasi di sebelah kanan hingga panjangnya 10 karakter:
Untuk menambahkannya dengan spasi di sebelah kiri hingga 15 karakter:
Ini membutuhkan mengetahui berapa lama Anda ingin pad, tentu saja, tetapi tidak perlu mengukur panjang string yang Anda mulai.
sumber
''.join(reversed(str))
lebih pythonic daripadastr[::-1]
, dan kita semua tahu itu tidak benar.(x + " " * 10)[:10]
menurut saya jauh lebih berbelit daripada menggunakanx.ljust(10)
.Trik yang bagus untuk digunakan sebagai ganti berbagai format cetak:
(1) Pad dengan spasi di sebelah kanan:
(2) Pad dengan angka nol di sebelah kiri:
sumber
min_len = 8
lalu('hi' + ' '*min_len)[:min_len]
atau('0'*min_len + str(2))[-min_len]
('0'*min_len + str(2))[-min_len:]
baik, meskipun ini hanya untuk bersenang-senang, dan saya merekomendasikan jawaban lain.Anda bisa melakukannya menggunakan pemahaman daftar, ini akan memberi Anda gambaran tentang jumlah spasi juga dan akan menjadi satu liner.
sumber
s = "hi"
;s + (6-len(s)) * " "
sebaliknya (tidak apa-apa ketika hasilnya negatif) .Namun, jawaban yang menggunakan fitur kerangka apa pun yang mengatasi masalah pasti akan lebih mudah dipertahankan (lihat jawaban lain)