Python 将带负数的字符串转换为浮点列表

Python 将带负数的字符串转换为浮点列表,python,type-conversion,Python,Type Conversion,我正在努力将一个带有数字的字符串(其中一些是负数)转换为浮动列表 我正在从一个文件中读取数据,该文件每行有许多数字。我想根据这些数字制作一个浮动列表,以便以后能够使用它们。我正在努力使负数正确读取。为了让事情更清楚,我正在输入文件的每一行上运行一个函数,我希望返回列表中的浮动 我尝试了isdigit()、float()和许多正则表达式。到目前为止没有成功。提供的代码显示了我尝试过的一些方法 def find_float(input): temp_list = [] print("

我正在努力将一个带有数字的字符串(其中一些是负数)转换为浮动列表

我正在从一个文件中读取数据,该文件每行有许多数字。我想根据这些数字制作一个浮动列表,以便以后能够使用它们。我正在努力使负数正确读取。为了让事情更清楚,我正在输入文件的每一行上运行一个函数,我希望返回列表中的浮动

我尝试了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
上面所有的regexpr都是负号:他们把数字读为正数。其他方法让我没有任何负数

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]

--提前感谢您的建议:)

试试这个:

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]]
试试这个:

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]]
使用您的示例数据:

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]
使用您的示例数据:

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]

您的输入文件是否只包含空格分隔的数字?如果是这样的话,您可以简单地迭代这些行并使用split方法。目前确实如此,但我想让它更通用。脚本将用于从Matlab导入数据,可能会使用各种分隔符。您的输入文件是否只包含以空格分隔的数字?如果是这样的话,您可以简单地迭代这些行并使用split方法。目前确实如此,但我想让它更通用。脚本将用于从Matlab导入数据,可能会使用各种分隔符。