简体   繁体   中英

Formatted strings, decimals and commas 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.

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.

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]))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM