写入文本文件浮点数



现在我有了这样的代码:

    for s,h,v,r in zip(lopullinen, yksilo, osallistumiset, pistemaarat):
        tulostuksia.write(str(s) + ";".join(h) + ";" + str(r) + ";" + ";".join(str(v)) + "/7" + "n")

,输出如下:

tunnus;nimi;sarja;juoksu-60m;pituushyppy;kuulantyonto;korkeushyppy;aitajuoksu-60m;seivashyppy;juoksu-1000m;kokonaispisteet;lajeja
101;Vertti Veteraaniurheilija;M70;709;651;750;806;850;759;801;5326;7/7
41;Severi Seitsenottelija;M;603;551;600;555;559;655;700;4223;7/7
42;Seppo Seitsenottelija;M;661;750;700;610;505;502;700;4428;7/7
43;Ylermi Yleisurheilija;M;603;601;700;655;661;555;500;4275;7/7
60;K. Keskeyttäjä;M40;603;601;-;-;-;-;-;1204;2/7
61;Yrjänä Yleisurheilija;M40;559;500;650;701;603;655;650;4318;7/7

但是我希望这些数字是浮点型的。这样的:

101;Vertti Veteraaniurheilija;M70;709.0;651.0;750.0;806.0;850.0;759.0;801.0;5326;7/7

这些数字来自列表yksilo,其中包含来自class的数字。如果我将其更改为float(当添加到列表中时),并从上面的for循环";".join(str(h))。它给我的输出是";"在每个数字(7;0;9;.;0;等……)如果我不把str(h)在那里,它给出"TypeError: sequence item 0: expected str instance, float found"。

有没有一种简单的方法把这些数字变成709.0而不是709

使用

'%f' % value

而不是简单的

str(value)

但是如果value一开始是浮点数,那么str(value)应该已经给出了'4.0'。因此,也许你需要先将该值转换为浮点数:

str(float(value))

另外,如果您需要保留-值,您也必须检查这些值。在你的例子中,使用

tulostuksia.write(
  '%s%s;%s;%s%s' % (
    s,
    ";".join(h),
    r,
    ";".join('-' if vi == 'i' else str(float(vi)) for vi in v),
    "/7n")

如果h是列表[709.0, 651.0],那么str(h)给出"[709.0, 651.0]"';'.join(str(h)),如您所见,将遍历字符串中的字符,而不是列表中的值。

试试';'.join(map(str, h))。这将列表中的每个项单独转换为字符串(无论是'-'还是float),然后join是字符串的结果可迭代/列表(取决于Python版本)。

的例子:

>>> print(";".join(map(str, ["-", 123.4, 567.8, "-", "-", 9.0])))
-;123.4;567.8;-;-;9.0

相关内容

最新更新