一尘不染

格式化字符串、小数和逗号问题

py

我有一个 .txt 文件,我读了它并希望使用这些值创建格式化字符串。第 3 列和第 4 列需要小数,最后一列需要百分号和 2 位小数。格式化的字符串将显示类似“公牛队的总上座率为 894659,平均上座率为 21,820,容量为 104.30%”

缩短的 .txt 文件包含以下几行:

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

到目前为止,我的代码看起来像这样,并且它大部分工作,减去逗号和小数位。

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}%.')

非常感谢任何有关如何格式化代码以显示带逗号 (21820 ->21,828) 的数字和带有 2 位小数和百分号 (104.3 -> 104.30%) 的最后一列的帮助。


阅读 99

收藏
2023-02-01

共1个答案

一尘不染

对于如何解决这个问题,您有一些选择。

选项 1:使用 f 字符串(仅限 Python 3

由于您提供的代码已经使用 f 字符串,因此此解决方案应该适合您。对于阅读此处的其他人,这仅在您使用 Python 3 时才有效。

您可以在 f 字符串中进行字符串格式化,通过:在大括号内的变量名后面放置一个冒号来表示{},之后您可以使用所有常用的python 字符串格式化选项

因此,您只需更改其中一行代码即可完成此操作。您的打印行看起来像:

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

变量被解释为:

  • 只是打印{b}字符串。b
  • {int(c):,}和分别用逗号(由 表示){int(d):,}打印和 的c整数版本。d``:,
  • 打印带两位小数的浮点数版本(由表示{float(e):.2f})。e``:.2f

选项 2:使用string.format()

对于此处正在寻找 Python 2 友好解决方案的其他人,您可以将打印行更改为以下内容:

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

请注意,这两个选项使用相同的格式化语法,只是 f 字符串选项的好处是让您将变量名写在它出现在结果打印字符串中的正确位置。

2023-02-01