Is it possible to align a print statement to the center in Python?

23,656

Solution 1

First, use os.get_terminal_size() function to get the console's width(so you don't need to know your console before):

>>> import os
>>> os.get_terminal_size()
os.terminal_size(columns=80, lines=24)
>>> os.get_terminal_size().columns
80
>>> os.get_terminal_size().columns  # after I changed my console's width
97
>>> 

Then, we can use str.center():

>>> import os
>>> print("hello world".center(os.get_terminal_size().columns))
                                  hello world                                  
>>> 

So the clear code looks like:

import os

width = os.get_terminal_size().columns
print("hello world".center(width))

Solution 2

Knowing the console width, you can also print centered using format:

 # console width is 50 
 print "{: ^50s}".format("foo")

will print 'foo' in the middle of a 50-column console.

Share:
23,656
Kt Ewing
Author by

Kt Ewing

Updated on December 12, 2020

Comments

  • Kt Ewing
    Kt Ewing over 3 years

    I was wondering if it was possible to align a print statement in Python (newest version). For example:

    print ("hello world")
    

    would appear on the user's screen on the left side, so can i make it centre-aligned instead?

    Thank you so much for your help!

    = 80 (column) x 30 ( width)

  • Remi Guan
    Remi Guan over 8 years
    If you want to use Python to do that, the answer is No. Because Python is running inside the console.
  • Xavier Combelle
    Xavier Combelle over 8 years
    @KtEwing do you mean specify a console size independently to the real console size ?
  • Remi Guan
    Remi Guan over 8 years
    If you want to do that, then I don't know. But that would be very interesting.
  • George
    George over 8 years
    on linux, you can call wmctrl to set the size and position of a terminal window (not a python command, but a separate program, but you could call it with subprocess or something maybe)
  • Xavier Combelle
    Xavier Combelle over 8 years
    @KtEwing just replace width = os.get_terminal_size().columns by width = 50 or whatever value you want for the width
  • TheTechRobo Stands for Ukraine
    TheTechRobo Stands for Ukraine over 3 years
    In Python 3.6+ you can do this with f-strings: print(f"{: ^50s}")
  • Anand
    Anand over 3 years
    Can't figure why this does not work with "\nHello World\n"?