Python:如何从文本文件中提取浮点值?

时间:2017-04-20 08:54:19

标签: python numbers floating

我在这样的文件中有内容,我想从中提取浮点值。文本文件也包含新行,也应该在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

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

先谢谢

4 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

如果那不是一个大文件,

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

答案 2 :(得分:0)

拆分和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,为变量指定正确的名称,因为根据名称变量类型是Dictionary,坚持它不是大小写。将名称命名为newList或“result_list”或任何有意义的名称。

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

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

答案 3 :(得分:0)

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

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

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

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

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