我在这样的文件中有内容,我想从中提取浮点值。文本文件也包含新行,也应该在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
但我没有得到任何输出它向我显示了错误。循环中的变量文件包含文本文件。如果有人知道如何只提取浮点数。请帮助它。
先谢谢
答案 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])
不正确。
变量名称
newDict
:您将newDict
变量定义为list
,为变量指定正确的名称,因为根据名称变量类型是Dictionary,坚持它不是大小写。将名称命名为newList
或“result_list”或任何有意义的名称。
您将newDict
定义为列表结构,并为字符分配值。
newDict[splitline[0]] = ",".join(splitline[1:])
这不起作用,因为newDict
是列表,而不是词典数据类型。
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]))
这将从文本文件中提取所有浮点值,并将它们作为浮点数存储在单个列表中。