Python: String Formatting – 2

Python has various methods for string formating to control over the appearance of the displayed data on the screen. This previous tutorial has explained the string formatting using modulo ‘%’ character.

This tutorial has illustrated the second method for string formatting using Python’s built-in string str.format()function. The string on which this method is called can contain text or replacement fields delimited by braces {}.

Each replacement field contains either the numeric index of a positional argument or the name of a keyword argument. The str.format() function return a copy of a string where each replacement field is replaced with the string value of the corresponding argument.

In [1]:
x = "Hello, {} {}! How are you?".format("Mark","Ronsn")
print(x)
Out[1]:
Hello, Mark Ronsn! How are you?

You can also add the index of a positional argument in the replacement field.

In [2]: print("Hello, {1} {0}! How are you?".format("Mark","Ronsn"))
Out[2]: Hello, Ronsn Mark! How are you?

You can also pass the name of the keyword argument in the replacement field.

In [3]: 
print("Hello, {fname} {lname}! How are you?".format(fname = "Mark",lname="Ronsn"))
Out[3]: Hello, Mark Ronsn! How are you?

You can also use the Python dictionary to pass the argument in the replacement field.

In [4]: 
name = {"fname":"Mark","lname":"Ronsn"}
print("Hello, {fname} {lname}! How are you?".format(**name))
Out[4]: 
Hello, Mark Ronsn! How are you?

You can also use the sequence as an argument and unpack it.

In [5]: print("{} + {} = {}".format(*'123'))
Out[5]: 1 + 2 = 3
In [6]: print("{2} + {0} = {1}".format(*'143'))
Out[6]: 3 + 1 = 4

.     .     .

Text Alignment & specifying a width

Option Meaning
'<' Forces the field to be left-aligned within the available space.
'>' Forces the field to be right-aligned within the available space.
'=' Forces the padding to be placed after the sign (if any) but before the digits. This is used for printing fields in the form ‘+000000120’. This alignment option is only valid for numeric types. It becomes the default when ‘0’ immediately precedes the field width.
'^' Forces the field to be centered within the available space.

 

In most of the cases, the syntax is similar to the modulo %-formatting, with the addition of the {} and with : used instead of %. For example, '%03.2f' can be translated to '{:03.2f}'.

 

Examples

In [7]: 
print("{:<30}".format("Hello, Python"))   # width: 30 & '<': 'left aligned'
print("{:>30}".format("Hello, Python"))   # width: 30 & '>': 'right aligned'
print("{:^30}".format("Hello, Python"))   # width: 30 & '^': 'center aligned'
print("{:*<30}".format("Hello, Python"))  # width: 30 & '<': 'left aligned' & '*' as a fill char
print("{:@^30}".format("Hello, Python"))  # width: 30 & '^': 'center aligned' & '@' as a fill char

Out[7]: 
'Hello, Python                 '
'                 Hello, Python'
'        Hello, Python         '
'Hello, Python*****************'
'@@@@@@@@Hello, Python@@@@@@@@@'

.     .     .

The Sign Option

The sign option is only valid for number types.

Option Meaning
'+' indicates that a sign should be used for both positive as well as negative numbers.
'-' indicates that a sign should be used only for negative numbers (this is the default behavior).
space indicates that a leading space should be used on positive numbers, and a minus sign on negative numbers.

 

In [8]: print('{:f}; {:f}'.format(1.23, -1.23))     # Defalult: No sign
Out[8]: 1.230000; -1.230000

In [9]: print('{:+f}; {:+f}'.format(1.23, -1.23))   # Use '+' sign
Out[9]: +1.230000; -1.230000

In [10]: print('{:-f}; {:-f}'.format(1.23, -1.23))  # USe '-' sign
Out[10]: 1.230000; -1.230000

In [11]: print('{: f}; {: f}'.format(1.23, -1.23))  # Use ' '(space) sign
Out[11]: 1.230000; -1.230000

.     .     .

Type Conversation

Type Meaning
'b' Binary format. Outputs the number in base 2.
'c' Character. Converts the integer to the corresponding Unicode character before printing.
'd' Decimal Integer. Outputs the number in base 10.
'o' Octal format. Outputs the number in base 8.
'x' Hex format. Outputs the number in base 16, using lower-case letters for the digits above 9.
'X' Hex format. Outputs the number in base 16, using upper-case letters for the digits above 9.
'n' Number. This is the same as 'd', except that it uses the current locale setting to insert the appropriate number separator characters.
'e' Exponent notation. Prints the number in scientific notation using the letter ‘e’ to indicate the exponent. The default precision is 6.
'E' Exponent notation. Same as 'e' except it uses an upper case ‘E’ as the separator character.
'f' Fixed-point notation. Displays the number as a fixed-point number. The default precision is 6.
'F' Fixed-point notation. Same as 'f', but converts nan to NAN and inf to INF.

 

In [12]: print("int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(125))
Out[12]: int: 125; hex: 7d; oct: 175; bin: 1111101

.     .     .

The '#' Option – This option is only valid for integer, float, complex and Decimal types. '#' option adds the prefix '0b''0o', or '0x' to the output value binary, octal and hexadecimal respectively.

In [13]: print("int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(125))
Out[13]: int: 125; hex: 0x7d; oct: 0o175; bin: 0b1111101

The ',' Option – Use the comma as a thousands separator

In [14]: print('{:,}'.format(1525008750))
Out[14]: 1,525,008,750

The ‘%’ percentage Character – Multiplies the number by 100 and displays in fixed ('f') format, followed by a percent sign.

In [15]: print('Percentage: {:.1%}'.format(12/52))    # 12/15 = 0.23076
Out[15]: Percentage: 23.1%

.     .     .

Leave a Reply

Your email address will not be published. Required fields are marked *

Python Tutorials