繁体   English   中英

字符串列表转换为float python

[英]String List conversion to float python

我有一个带有数字行代表矢量的文件。 我正在尝试将其转换为浮点数列表。 现在,我的问题是它仅占用每行的第一行。 我尝试遍历每个索引,但是遇到“无法将字符串转换为浮点数”的错误

这是我的代码:

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:无法将字符串转换为浮点型:'-0.02543 0.0025865 ...'

使用正则表达式从文件中提取所有浮点数。 然后使用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]]

另一种简单快捷的方法:

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的输入,但是对于您而言,该行将来自您的文件。

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

假设这是您的文件:

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")

我知道,您是通过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]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM