String List转换为float python

时间:2018-06-13 13:22:38

标签: python machine-learning

我有一个代表向量的数字行的文件。 我试图将其转换为浮动列表列表。 现在,我的问题是它只需要每行的第一行。 我试图遍历每个索引,但我遇到“无法将字符串转换为浮动”的错误

这是我的代码:

with open(input_file) as f:
    content = f.readlines()
content = [x.strip() for x in content]
input_val_arr = list(map(float, [i.split(' ', 1)[0] for i in content]))

输入格式:

0.03518 -0.02543 ... (dim = 100)

0.0025865 -0.01867 ....

...

(dim = ALOT)

渴望输出:

[[ 0.03518 , -0.02543 ...]

 [0.0025865 -0.01867 ...]

...

]]

我试图将我的代码更改为:

with open(input_file) as f:
    content = f.readlines()
input_val_arr = []
for index in range(x_dim):
    temp_list = list(map(float, [i.split(' ', 1)[index] for i in content]))
    input_val_arr.append(temp_list)

我收到以下错误: ValueError:无法将字符串转换为float:' - 0.02543 0.0025865 ...'

4 个答案:

答案 0 :(得分:1)

使用正则表达式从文件中提取所有浮点数。然后使用map将其转换为float对象。

<强>实施例

import re
res = []
with open(filename, "r") as infile:
    for line in infile.readlines():
        data = re.findall("-?\d+\.\d+", line)
        if data:
            floatData = list(map(float, data))
            res.append(floatData)
print(res)

<强>输出:

[[0.03518, -0.02543], [0.0025865, -0.01867]]

答案 1 :(得分:1)

另一种简单快捷的方法:

line = "0.0025865 -0.01867"
values  = list(map(float, line.split()))
print(values)

输出:

[0.0025865, -0.01867]

如果你想要一个包含列表的列表,列表代表一个文件中的一行,那么这样的东西就可以了:

result = []

for i in range(5):
    line = "0.0025865 -0.01867\n"
    values  = list(map(float, line.split()))
    result.append(values)

print(result)

输出:

[[0.0025865, -0.01867], [0.0025865, -0.01867], [0.0025865, -0.01867], [0.0025865, -0.01867], [0.0025865, -0.01867]]

为简单起见,我使用了一个名为line的单个输入5次,但在您的情况下,该行将来自您的文件。

这里我们假设该行是文件中的一行,并且它包含数值。您应该完成代码以处理极端情况。

答案 2 :(得分:0)

让我们说这是你的文件:

0.03518 -0.02543 0.5469 0.538

分离是空间。

with open(input_file, "r") as f:
    content = f.read()

content = content = content.split(" ")
content = [eval(elt) for elt in content]

# Output: Out[43]: [0.03518, -0.02543, 0.5469, 0.538]

如果你有几行显示:

with open(input_file, "r") as f:
    content= f.readlines()

content = [line.split(" ") for line in content]
content = [[eval(x) for x in elt] for elt in content]

如果需要,您可能需要添加strip("\n")

答案 3 :(得分:0)

我知道,你是在通过python问。但无论您想要实现什么,都可以使用numpy完成。和np.loadtxt作为多个选项,有助于处理包含数字数据的平面文件。

import numpy as np
numbers = np.loadtxt('file_name.txt')
numbers

,输出如下所示

[[ 3.518e-02, -2.543e-02,  3.518e-02, -2.543e-02,  3.518e-02,
        -2.543e-02,  3.518e-02, -2.543e-02,  3.518e-02, -2.543e-02,
         3.518e-02, -2.543e-02,  3.518e-02, -2.543e-02,  3.518e-02,
        -2.543e-02,  3.518e-02, -2.543e-02,  3.518e-02, -2.543e-02,
         3.518e+03, -2.543e-02,  3.518e-02, -2.543e-02],
       [ 3.518e-02, -2.543e-02,  3.518e-02, -2.543e-02,  3.518e-02,
        -2.543e-02,  3.518e-02, -2.543e-02,  3.518e-02, -2.543e-02,
         3.518e-02, -2.543e-02,  3.518e-02, -2.543e-02,  3.518e-02,
        -2.543e-02,  3.518e-02, -2.543e-02,  3.518e-02, -2.543e-02,
         3.518e+03, -2.543e-02,  3.518e-02, -2.543e-02]]