我有一个代表向量的数字行的文件。 我试图将其转换为浮动列表列表。 现在,我的问题是它只需要每行的第一行。 我试图遍历每个索引,但我遇到“无法将字符串转换为浮动”的错误
这是我的代码:
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 ...'
答案 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]]