Python:如何从文本文件中提取浮点值?
我在这样的文件中有内容,我只想从中提取浮点值。文本文件也包含新行,在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(
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])]