Hướng dẫn python f-string space padding

I want to fill out a string with spaces. I know that the following works for zero's:

Show
>>> print  "'%06d'"%4
'000004'

But what should I do when I want this?:

'hi    '

of course I can measure string length and do str+" "*leftover, but I'd like the shortest way.

Hướng dẫn python f-string space padding

codeforester

35.7k16 gold badges101 silver badges126 bronze badges

asked Apr 15, 2011 at 12:22

1

You can do this with str.ljust(width[, fillchar]):

Return the string left justified in a string of length width. Padding is done using the specified fillchar (default is a space). The original string is returned if width is less than len(s).

>>> 'hi'.ljust(10)
'hi        '

answered Apr 15, 2011 at 12:24

Hướng dẫn python f-string space padding

Felix KlingFelix Kling

769k171 gold badges1068 silver badges1114 bronze badges

5

For a flexible method that works even when formatting complicated string, you probably should use the string-formatting mini-language,

using either f-strings

>>> f'{"Hi": <16} StackOverflow!'  # Python >= 3.6
'Hi               StackOverflow!'

or the str.format() method

>>> '{0: <16} StackOverflow!'.format('Hi')  # Python >=2.6
'Hi               StackOverflow!'

Hướng dẫn python f-string space padding

Neuron

4,5754 gold badges32 silver badges53 bronze badges

answered Apr 15, 2011 at 12:41

simonsimon

14.3k4 gold badges43 silver badges67 bronze badges

9

The new(ish) string format method lets you do some fun stuff with nested keyword arguments. The simplest case:

>>> '{message: <16}'.format(message='Hi')
'Hi             '

If you want to pass in 16 as a variable:

>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi              '

If you want to pass in variables for the whole kit and kaboodle:

'{message:{fill}{align}{width}}'.format(
   message='Hi',
   fill=' ',
   align='<',
   width=16,
)

Which results in (you guessed it):

'Hi              '

And for all these, you can use python 3.6+ f-strings:

message = 'Hi'
fill = ' '
align = '<'
width = 16
f'{message:{fill}{align}{width}}'

And of course the result:

'Hi              '

answered Aug 13, 2014 at 18:40

CivFanCivFan

12.3k9 gold badges39 silver badges57 bronze badges

2

You can try this:

print "'%-100s'" % 'hi'

answered Apr 15, 2011 at 12:24

abbotabbot

26.6k6 gold badges51 silver badges56 bronze badges

5

Correct way of doing this would be to use Python's format syntax as described in the official documentation

For this case it would simply be:
'{:10}'.format('hi')
which outputs:
'hi '

Explanation:

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
fill        ::=  
align       ::=  "<" | ">" | "=" | "^"
sign        ::=  "+" | "-" | " "
width       ::=  integer
precision   ::=  integer
type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Pretty much all you need to know is there ^.

Update: as of python 3.6 it's even more convenient with literal string interpolation!

foo = 'foobar'
print(f'{foo:10} is great!')
# foobar     is great!

Azat Ibrakov

8,9589 gold badges37 silver badges45 bronze badges

answered Jul 21, 2016 at 13:33

Hướng dẫn python f-string space padding

GranitosaurusGranitosaurus

19.5k4 gold badges53 silver badges76 bronze badges

Use str.ljust():

>>> 'Hi'.ljust(6)
'Hi    '

You should also consider string.zfill(), str.ljust() and str.center() for string formatting. These can be chained and have the 'fill' character specified, thus:

>>> ('3'.zfill(8) + 'blind'.rjust(8) + 'mice'.ljust(8, '.')).center(40)
'        00000003   blindmice....        '

These string formatting operations have the advantage of working in Python v2 and v3.

Take a look at pydoc str sometime: there's a wealth of good stuff in there.

answered Apr 15, 2011 at 12:27

Hướng dẫn python f-string space padding

johnsywebjohnsyweb

132k23 gold badges178 silver badges239 bronze badges

1

As of Python 3.6 you can just do

>>> strng = 'hi'
>>> f'{strng: <10}'

with literal string interpolation.

Or, if your padding size is in a variable, like this (thanks @Matt M.!):

>>> to_pad = 10
>>> f'{strng: <{to_pad}}'

answered Jul 6, 2016 at 16:05

WAFWAF

9853 gold badges14 silver badges31 bronze badges

2

TL;DR

text = 'hi'
print(f'{text:10}') # 'hi        '

Longer explanation

Since Python3.6 you can use f-strings literal interpolation.

Variable space:

value = 4
space = 10

# move value to left
print(f'foo {value:<{space}} bar') # foo 4          bar
# move value to right
print(f'foo {value:>{space}} bar') # foo          4 bar
# center value
print(f'foo {value:^{space}} bar') # foo     4      bar

Constant space:

value = 4

# move value to left
print(f'foo {value:<10} bar') # foo 4          bar
# move value to right
print(f'foo {value:>10} bar') # foo          4 bar
# center value
print(f'foo {value:^10} bar') # foo     4      bar

If you want to padd with some other char then space, specify it at the beginning:

value = 4
space = 10
padd = '_'

print(f'foo {value:{padd}^{space}} bar') # foo ____4_____ bar
print(f'foo {value:_^10} bar')           # foo ____4_____ bar

answered Sep 17, 2021 at 8:55

K.MatK.Mat

1,1009 silver badges15 bronze badges

2

you can also center your string:

'{0: ^20}'.format('nice')

answered Jul 24, 2012 at 16:14

RemiRemi

19.9k8 gold badges55 silver badges41 bronze badges

Use Python 2.7's mini formatting for strings:

'{0: <8}'.format('123')

This left aligns, and pads to 8 characters with the ' ' character.

answered Apr 15, 2011 at 12:58

aodjaodj

2,0831 gold badge12 silver badges12 bronze badges

2

Just remove the 0 and it will add space instead:

>>> print  "'%6d'"%4

eldarerathis

34.8k10 gold badges89 silver badges93 bronze badges

answered Jun 12, 2015 at 13:30

Hướng dẫn python f-string space padding

Amir MofakharAmir Mofakhar

6,5572 gold badges13 silver badges5 bronze badges

Wouldn't it be more pythonic to use slicing?

For example, to pad a string with spaces on the right until it's 10 characters long:

>>> x = "string"    
>>> (x + " " * 10)[:10]   
'string    '

To pad it with spaces on the left until it's 15 characters long:

>>> (" " * 15 + x)[-15:]
'         string'

It requires knowing how long you want to pad to, of course, but it doesn't require measuring the length of the string you're starting with.

answered Sep 15, 2015 at 6:09

5

A nice trick to use in place of the various print formats:

(1) Pad with spaces to the right:

('hi' + '        ')[:8]

(2) Pad with leading zeros on the left:

('0000' + str(2))[-4:]

answered Jan 29, 2019 at 19:40

Hướng dẫn python f-string space padding

Erik AndersonErik Anderson

4,6153 gold badges29 silver badges28 bronze badges

2

You could do it using list comprehension, this'd give you an idea about the number of spaces too and would be a one liner.

"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello                 '

answered Nov 23, 2018 at 13:34

Hướng dẫn python f-string space padding

2