Formatted strings, decimals and commas question

Question:

I have a .txt file that I read in and wish to create formatted strings using these values. Columns 3 and 4 need decimals and the last column needs a percent sign and 2 decimal places. The formatted string will say something like "The overall attendance at Bulls was 894659, average attendance was 21,820 and the capacity was 104.30%’

the shortened .txt file has these lines:

1   Bulls   894659  21820   104.3
2   Cavaliers   843042  20562   100
3   Mavericks   825901  20143   104.9
4   Raptors 812863  19825   100.1
5   NY_Knicks   812292  19812   100

So far my code looks like this and its mostly working, minus the commas and decimal places.

file_1 = open ('basketball.txt', 'r')
count = 0

list_1 = [ ]
for line in file_1:
    count += 1
    textline = line.strip()
    items = textline.split()
    list_1.append(items)

print('Number of teams: ', count)
for line in list_1:
    print ('Line: ', line)

file_1.close()

for line in list_1: #iterate over the lines of the file and print the lines with formatted strings
    a, b, c, d, e = line
    print (f'The overall attendance at the {b} game was {c}, average attendance was {d}, and the capacity was {e}%.')

Any help with how to format the code to show the numbers with commas (21820 ->21,828) and last column with 2 decimals and a percent sign (104.3 -> 104.30%) is greatly appreciated.

Asked By: xXOhILaughXx

||

Answers:

You’ve got some options for how to tackle this.

Option 1: Using f strings (Python 3 only)

Since your provided code already uses f strings, this solution should work for you. For others reading here, this will only work if you are using Python 3.

You can do string formatting within f strings, signified by putting a colon : after the variable name within the curly brackets {}, after which you can use all of the usual python string formatting options.

Thus, you could just change one of your lines of code to get this done. Your print line would look like:

print(f'The overall attendance at the {b} game was {int(c):,}, average attendance was {int(d):,}, and the capacity was {float(e):.2f}%.')

The variables are getting interpreted as:

  • The {b} just prints the string b.
  • The {int(c):,} and {int(d):,} print the integer versions of c and d, respectively, with commas (indicated by the :,).
  • The {float(e):.2f} prints the float version of e with two decimal places (indicated by the :.2f).

Option 2: Using string.format()

For others here who are looking for a Python 2 friendly solution, you can change the print line to the following:

print("The overall attendance at the {} game was {:,}, average attendance was {:,}, and the capacity was {:.2f}%.".format(b, int(c), int(d), float(e)))

Note that both options use the same formatting syntax, just the f string option has the benefit of having you write your variable name right where it will appear in the resulting printed string.

Answered By: Bibit Bianchini

This is how I ended up doing it, very similar to the response from Bibit.

file_1 = open ('something.txt', 'r')

count = 0

list_1 = [ ]
for line in file_1:

    count += 1
    textline = line.strip()  
    items = textline.split()
    items[2] = int(items[2])
    items[3] = int(items[3])
    items[4] = float(items[4])

    list_1.append(items)

print('Number of teams/rows: ', count)

for line in list_1:
    print ('Line: ', line)

file_1.close()

for line in list_1:
   print ('The overall attendance at the {:s} games was {:,}, average attendance was {:,}, and the capacity was {:.2f}%.'.format(line[1], line[2], line[3], line[4]))

Answered By: xXOhILaughXx
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.