[英]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.