【问题标题】:Python: How to extract float values from text file?Python:如何从文本文件中提取浮点值?
【发布时间】:2017-04-20 08:54:18
【问题描述】:

我在这样的文件中有内容,我只想从中提取浮点值。文本文件还包含新行,也应在 Python 中删除。

hub,0.0166
cord,0.0166
ever,0.0332
switch,0.0498
sleep,0.06639
allow,0.09959

work,0.14939

我试过这个:

newDict = list()
for words in file:
    splitline = words.split()
    newDict.append("{0}\t{1}".format(splitline[0],log(float(splitline[1]))))
    newDict[float(splitline[0])] = ",".join(splitline[1:])
print(newDict)

我观察到的错误是:

Traceback (most recent call last):
  File "G:\Setups\Python\chi-1.py", line 11, in <module>
    newDict.append("{0}\t{1}".format(splitline[0],log(float(splitline[1]))))
IndexError: list index out of range

但我没有得到任何输出它向我显示了错误。循环中的变量文件包含文本文件。所以如果有人知道如何只提取浮点数。请帮忙。

提前致谢

【问题讨论】:

  • 错误是什么
  • 你忘记了分隔符:splitline = words.split(',')
  • 它显示错误 --- ` Traceback(最近一次调用最后):文件“G:\Setups\Python\chi-1.py”,第 17 行,在 newDict[float (splitline[0])] = ",".join(splitline[1:]) ValueError: could not convert string to float:`
  • 解决了。谢谢
  • @ForamKalyani 不客气

标签: python numbers floating


【解决方案1】:

如果不是大文件,

import re
with open('file.txt') as f:
    print(re.findall('\d*?\.\d+', f.read()))

【讨论】:

    【解决方案2】:

    您可以使用csv 模块使其更简单一些:

    from math import log
    
    l = []
    
    with open('path/to/file', 'r') as f:
        csv_f = csv.reader(f, delimiter=',')
    
        for row in csv_f:
            l.append(log(float(row[1])))
    
    print l
    

    输出:

    -4.09835258362
    -4.09835258362
    -3.40520540306
    -2.99974029495
    -2.71220883625
    -2.30669352104
    -1.90119494293
    

    【讨论】:

      【解决方案3】:

      拆分和IndexError: list index out of range异常

      words 变量中,您将获得hub,0.0166\n 值。

      所以splitline = words.split() 不适合你,因为默认split 使用space, \n, \t 来拆分字符串。

      使用splitline = words.strip().split(",") 分割字符串。

      类型转换

      由于splitline 的第一项是string type,所以我们不能转换为浮点数。

      float(splitline[0]) 的说法不正确。

      变量名

      1. newDict:您将newDict 变量定义为list,给变量起正确的名称,因为根据名称变量类型是字典,但不是大小写。将名称命名为 newList 或“result_list”或任何有意义的名称。

      2. 您将newDict 定义为列表结构,并像字典一样分配值。 newDict[splitline[0]] = ",".join(splitline[1:]) 这不起作用,因为newDict 是列表,而不是字典数据类型。

      3. file:文件是Python中的保留字,不要使用变量名等名称。

      【讨论】:

        【解决方案4】:

        您犯的错误是您的代码假定每个splitline 列表中始终至少有两个项目。如果 a) 行没有.split() 函数的有效分隔符,或者 b) 行是空的,则情况并非如此。因此,splitline[1] 返回您所看到的 IndexError

        如 faost 所述,您需要将 .split() 的分隔符指定为 ',',因为 .split() 使用空格作为默认分隔符。

        您提到文本文件包含“新行”,我认为这意味着空行?如果是这种情况,您需要在代码中考虑到这一点。您可以检查列表的长度,并确保仅在其长度大于 1 时对其进行操作:

        new_list = []
        for row in data:
          split_row = row.split(',')
          if len(split_row) > 1:
            new_list.append(float(split_row[1]))
        

        这将从您的文本文件中提取所有浮点值并将它们作为浮点数存储在单个列表中。

        【讨论】:

          猜你喜欢
          • 2011-01-18
          • 2021-09-25
          • 2017-10-17
          • 1970-01-01
          • 2020-03-20
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多