我正在努力将具有数字(其中一些为负)的字符串转换为浮点数列表。
我正在从每行包含许多数字的文件中读取数据。我想列出这些数字的浮点数,以便以后使用它们。我正在努力使负数正确读取。为了使情况更清楚,我在输入文件的每一行上运行一个函数,我希望返回列表中的浮点数。
我尝试过isdigit(),float()和许多正则表达式。到目前为止没有成功。提供的代码显示了我尝试过的一些方法。
def find_float(input):
temp_list = []
print("line just now being read is: {} ".format(input))
#1[DIDN'T WORK] number = re.findall(r"-?\d*\.\d+|\d+", input)
#2[DIDN'T WORK] number = re.findall("([+-](?=\.?\d))?(\d+)?(\.\d+)", input)
#3[DIDN'T WORK] number = re.findall(r"[-]?([1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|\.[0-9]{1,2})", input)
#4[DIDN'T WORK] number = re.findall(r"\-?(\d+\.?\d*|\d*\.?\d+)", input)
#5[DIDN'T WORK]for item in input:
# try:
# number = float(item)
# extracted_numbers.append(number)
print("Found number is: {}".format(number))
temp_list.append(number)
return temp_list
上面所有的正则表达式都省略负号:他们将neagitve数读为正数。其他方法使我完全没有任何负数。
Input_file.txt :(请注意,每行末尾都有空格)
0 8.42 43 -1.5
-259 0.832
522 -32
-3.33
12 -3 -45
我希望能够获得每行这样的列表
[0,8.42,43,-1.5]
[-259,0.832]
[522,-32]
[-3.33]
[12,-3,-45]
-提前感谢您的任何建议:)
答案 0 :(得分:2)
带有示例数据:
with open('Input_file.txt') as f:
for line in f:
data = [float(n) for n in line.split()]
print(data)
输出:
[0.0, 8.42, 43.0, -1.5]
[-259.0, 0.832]
[522.0, -32.0]
[-3.33]
[12.0, -3.0, -45.0]
答案 1 :(得分:0)
尝试一下:
In [1]: with open('test.txt', 'r') as f:
...: data = f.readlines()
In [2]: results = []
In [3]: for line in data:
...: entry = []
...: for num in line.split(' '):
...: if num.replace('-', '').strip().isdigit():
...: entry.append(int(num))
...: else:
...: try:
...: entry.append(float(num))
...: except Exception:
...: pass
...: results.append(entry)
In [4]: results
Out[4]:
[[0, 8.42, 43, -1.5],
[-259, 0.832],
[522, -32],
[-3.33],
[12, -3, -45]]