编写一个读取文件的函数,并将文件中的所有数字 returns 作为浮点数列表

Write a function that reads a file and returns all of the numbers in it as a list of floats

我有一个包含数千行的大型文本文件,但涵盖相同想法的一个简短示例是:

vapor dust -2C pb 
x14 71 hello! 42.42
100,000 lover baby: -2

混合了整数、字母数字和浮点数。

尝试索尔恩。 我这样做是为了创建一个由字符串组成的列表,但是我无法根据它的数字或字母数字来隔离每个单元格

with open ('file.txt','r') as f:
data = f.read().split()
#dirty = [ x for x in data if x.isnumeric()]
print(data)

#dirty 失败。

我很幸运地使用如下代码构建了一个包含几乎所有必需值的列表列表:

with open ('benzene_SDS.txt','r') as f:  
    for word in f:
        data= word.split()
        clean = [ x for x in data if x.isnumeric()]            
        res = list(set(data).difference(clean))
        print(clean)

但它不是 return 一个单独的列表,它是一个列表列表,其中大部分是空白的 []。

给出了一个提示,使用“try”控制语句对解决问题很有用,但我不知道如何利用它。

如有任何帮助,我们将不胜感激!谢谢。

numbers = []
with open('file.txt','r') as f:
    for line in f.read():
        words = line.split()
        numbers.extend([word for word in words if word.isnumeric()])

# Print all numbers
print(numbers)

# Print all unique numbers
print(set(numbers))

# Print all unique numbers, converted to floats
print([float(n) for n in set(numbers)])

如果您特别需要一个列表,那么您可以用 list() 包装集合。

如果您主要询问如何使用 try 来检查有效性,这就是您所追求的:

values = []
with open ('benzene_SDS.txt','r') as f:  
    for word in f.read().split():
        try:
            values.append(float(word))
        except ValueError:
            pass
print(values)

输出:

[71.0, 42.42, -2.0]

但是,并不是说这不会将 '100,000' 解析为 100100000

这段代码可以做到这一点:

import locale

locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')

values = []
with open('benzene_SDS.txt', 'r') as f:
    for word in f.read().split():
        try:
            values.append(locale.atof(word))
        except ValueError:
            pass

print(values)

结果:

[71.0, 42.42, 100000.0, -2.0]

注意 运行 与此相同的代码:

locale.setlocale(locale.LC_ALL, 'nl_NL.UTF-8')

产生不同的结果:

[71.0, 4242.0, 100.0, -2.0]

由于荷兰使用 , 作为小数点分隔符,. 作为千位分隔符(在 42.42 中基本上被忽略)