【问题标题】:ValueError: could not convert string to float.ValueError:无法将字符串转换为浮点数。
【发布时间】:2016-04-11 12:23:40
【问题描述】:

我正在尝试读取文本文件并将输入转换为列表:

model = open('Grids/Dusty_AGN/Z'+Z+'_n'+n+'_alp-'+alpha+'_fluxes.txt','r')

Hafluxfile = model.readline() + model.readline() + model.readline() ; the first three lines of the file contain the values that I need

Haflux = []

Haflux.append([float(x) for x in Hafluxfile.split(' ')])

如果我print Hafluxfile,这就是我看到的:

  2.97500      2.94300      2.92700      2.91800      2.90700      2.90200
  2.89300      2.87700      2.86700      2.87000      2.89900      2.93500
  2.91900

然后我在尝试附加列表Haflux 时收到此错误消息:

ValueError: 无法将字符串转换为浮点数

不,除了冒号之外我没有包含任何内容,它似乎告诉我空格阻止它到达第一个数字?我不知道如何解决这个问题。

【问题讨论】:

    标签: python


    【解决方案1】:

    项目之间有多个空格。调用split()时不要指定分隔符:

    如果 sep 未指定或为 None,则应用不同的分割算法:连续的空格被视为单个分隔符,如果字符串有前导或尾随,结果将在开头或结尾不包含空字符串空格。

    而且,您似乎还有前导和尾随空格,您可以使用 strip() 修剪它们:

    [float(x) for x in Hafluxfile.strip().split()]
    

    【讨论】:

      【解决方案2】:

      问题是你得到了一些空元素。

      Haflux.append([float(str(x)) for x in Hafluxfile.split(' ') if len(x)>1])
      

      这会照顾他们。

      【讨论】:

        【解决方案3】:

        首先你应该使用+ 连接你的路径组件,而不是你应该使用os.path.join 函数。话虽如此,我会使用csv 模块。

        import os
        import csv
        
        haflux = []
        filename = os.path.join('Grids/Dusty_AGN/Z', Z, '_n', n, '_alp-', alpha, '_fluxes.txt')
        with open('filename') as f:
            reader = csv.reader(f, delimiter=' ')
            for n in range(3):
                haflux.append([float(i) for i in next(reader) if i])
        
        print(haflux)
        #  [[2.975, 2.943, 2.927, 2.918, 2.907, 2.902], [2.893, 2.877, 2.867, 2.87, 2.899, 2.935], [2.919]]
        

        【讨论】:

          【解决方案4】:

          根据我对 Python 非常有限的理解,只要字符串中不存在其他非数字字符,自动将字符串转换为浮点数就足够聪明了。您应该尝试遍历您的文件并在每个号码上调用 isDigit() 以查看是否有任何隐藏的换行符或类似的东西。还是根本没有遍历列表的问题?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-23
            • 2018-06-13
            • 2013-05-30
            • 1970-01-01
            • 1970-01-01
            • 2022-08-04
            • 2019-12-19
            相关资源
            最近更新 更多