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

Python:如何从文本文件中提取浮点值?,python,numbers,floating,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(

我在这样的文件中有内容,我只想从中提取浮点值。文本文件也包含新行,在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
回溯(最近一次呼叫最后一次):
文件“G:\Setups\Python\chi-1.py”,第11行,在
newDict.append(“{0}\t{1}.”格式(splitline[0],log(float(splitline[1]))
索引器:列表索引超出范围
但是我没有得到任何输出,它显示了错误。循环中的变量文件包含文本文件。因此,如果有人知道如何只提取浮点数。请帮忙


提前感谢

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

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

如果那不是一个大文件

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

如果那不是一个大文件

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

拆分和
索引器:列表索引超出范围
异常

words
变量中,您得到
hub,0.0166\n

所以
splitline=words.split()
不适合您,因为默认情况下
split
使用
space\n\t
分割字符串

使用
splitline=words.strip()

类型转换

由于
splitline
中的第一项是
string类型
,因此我们无法转换为float

float(分割线[0])
不是正确的语句

变量名

  • newDict
    :您将
    newDict
    变量定义为
    list
    ,为变量指定正确的名称,因为根据名称,变量类型是Dictionary,而不是case。命名为
    newList
    或“result\u list”或任何有意义的名称

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

  • 文件
    :文件在Python中是保留字,不要使用变量名等名称


  • 拆分和
    索引器:列表索引超出范围
    异常

    words
    变量中,您得到
    hub,0.0166\n

    所以
    splitline=words.split()
    不适合您,因为默认情况下
    split
    使用
    space\n\t
    分割字符串

    使用
    splitline=words.strip()

    类型转换

    由于
    splitline
    中的第一项是
    string类型
    ,因此我们无法转换为float

    float(分割线[0])
    不是正确的语句

    变量名

  • newDict
    :您将
    newDict
    变量定义为
    list
    ,为变量指定正确的名称,因为根据名称,变量类型是Dictionary,而不是case。命名为
    newList
    或“result\u list”或任何有意义的名称

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

  • 文件
    :文件在Python中是保留字,不要使用变量名等名称


  • 您所犯的错误是,您的代码假定在每个
    拆分行中始终至少有两个项目。如果a)该行没有用于
    .split()
    函数的有效分隔符,或者b)您有一个空行,则不会出现这种情况。因此,
    splitline[1]
    返回您看到的
    索引器

    正如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]))
    

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

    您犯的错误是,您的代码假定在每个
    拆分行
    列表中始终至少有两个项目。如果a)该行没有用于
    .split()
    函数的有效分隔符,或者b)您有一个空行,则不会出现这种情况。因此,
    splitline[1]
    返回您看到的
    索引器

    正如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]))
    

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

    什么是错误您忘记了分隔符:
    splitline=words.split(',')
    它显示的错误--`Traceback(最近一次调用):文件“G:\Setups\Python\chi-1.py”,第17行,在newDict[float(splitline[0])=“,”。join(splitline[1:])ValueError:无法将字符串转换为浮点:`已解决它。Thanks@ForamKalyani很好,什么是错误您忘记了分隔符:
    splitline=words.split(',)
    it显示的错误--`Traceback(最近一次调用):文件“G:\Setups\Python\chi-1.py”,第17行,newDict[float(splitline[0])]