【问题标题】:trying to get two floats out of a string python [duplicate]试图从字符串python中得到两个浮点数[重复]
【发布时间】:2021-04-16 10:44:27
【问题描述】:

所以我有一个 txt 文件,它具有以下 2 个值 0.8812395E-5.1.000E+01 但是在 python 上打印时它说列表的两个组件是 [0.8812395E-5.1.000E+01, ''] 基本上改为分别考虑这两个值时,我需要将这两个数提取出来。

pressure = open('pressure.txt')
pressure = pressure.read()
line = pressure.split('\n')
print(len(line))
print(line)

结果

2
['.8812395E-15.1000000E+01', '']
Process finished with exit code 0

【问题讨论】:

  • " 而不是分别考虑这两个值" - 问题是您的值没有任何分隔。如果可以的话,你应该先尝试获得更好的结构化数据。
  • 尝试用'-' 分割它,因为它们不是两行,而是用破折号隔开的一行,如果我理解你的符号的话。
  • 可以修改文本文件的格式吗?使用唯一字符(例如逗号)将它们分开会更容易。现在它们用小数分隔,小数也用在科学记数法中。
  • 您当前的数据不明确。它可以解释为.8812395E-15.1000000E+01,或.8812395E-15.1000000E+01。正如其他人所说,您需要以某种方式分隔值。
  • 第二个值从哪里开始?

标签: python


【解决方案1】:

数字在同一行吗?你可以使用

line.replace('.','#0.').split('#',2)

然后你只需要删除第一个空白值。

【讨论】:

    【解决方案2】:

    如 cmets 中所述,如果可以,您应该更改值之间的分隔符。由于科学计数法中使用小数,因此很难有效地拆分字符串。如果您可以使用逗号代替,它会变得容易得多。

    如果您无法修改格式,此代码会将字符串拆分为所有小数,然后将值重新组合在一起。

    pressure = '0.8812395E-5.1.000E+01'
    seg = pressure.split('.')
    for i in range(0, len(seg), 2):
        f = float('.'.join(seg[i:i + 2]))
        print(f)
    

    输出:

    8.812395e-06
    10.0
    

    【讨论】:

    • 我不知道为什么这会被否决?
    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2011-06-09
    • 2020-12-17
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多