Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python multiline alignment using format

Background:

When I do data cleaning, I want print my arg name and its value in lines. However args' name vary at length and so do their values. For clarity, I want align arg's name to the left and arg's value to the right in each line.

For instance, I want result like following:

Output:

Arg1               :           value1
Arg2222222222222222:           value2
Arg3               : value33333333333

Current method:

Suppose I have 3 args and 3 values.

name_list = ['Arg1','Arg2222222222222222','Arg3']
value_list = ['value1', 'value2', 'value33333333333']

Using following code, I can print it clearly.

Code:

name_list = ['Arg1','Arg2222222222222222','Arg3']
value_list = ['value1', 'value2', 'value33333333333']
padding1 = max(map(len, name_list))
padding2 = max(map(len, value_list))
print("padding1 = {}, padding2 = {}".format(padding1,padding2))
for num in range(len(name_list)):
    print('{0}: {1}'.format(name_list[num].ljust(padding1), value_list[num].rjust(padding2)))

Output:

padding1 = 19, padding2 = 16
Arg1               :           value1
Arg2222222222222222:           value2
Arg3               : value33333333333

Question:

Can we use less code to achieve the same goal? Or, can we do it more specifically?

Thank you for your help, guys!

Some Citation

String alignment when printing in python

python 3 string formatting (alignment)

like image 865
Travis Avatar asked Aug 16 '26 08:08

Travis


1 Answers

Not much, but if using fstrings, you could do

for name, value in zip(name_list, value_list):
    print(f'{name:<{padding1}}:{value:>{padding2}}')    #fstring version

The < and > are for left and right alignment respectively.

Output will be

Arg1               :          value1
Arg2222222222222222:          value2
Arg3               :value33333333333

See this.

like image 98
J...S Avatar answered Aug 17 '26 21:08

J...S