如何从 .docx 文件中分离浮点数并将其添加到列表中?

how can i separate float numbers from a .docx file and add it to a list?

 from docx import Document
    numbers = []
    doc = Document('word.docx')
    for para in doc.paragraphs:
        new_text = para.text
        for char in new_text:
            if char in '0123456789.':
                numbers.append(char)
        print(new_text)
    
    print(numbers)

*这是一个波斯语 docx 文件

它return这个:

它是该属最大的动物,原产于亚洲,体长可达2.7至3米,体重达到306。这种动物最重要的特征是其橙红色皮毛上的深色垂直线条,下部颜色较浅。这种动物有肌肉发达的身体和非常强壮的腿。虎身长毛发亮,有竖纹。公虎比母虎大,公虎脸颊上的毛比母虎长。虎牙非常结实,是陆地动物中最长的。老虎的身长可达 74.5 毫米,有时可达 90 毫米。 老虎的寿命通常在 10 到 15 岁之间。据报道,动物园记录的最长寿命为 26 岁。

['2', '.', '7', '3', '3', '0', '6', '.', '.', '.', '.', '.', '.', '7', '4', '.', '5', '9', '0', '.', '1', '0', '1', '5 ', '.', '2', '6', '.']

如您所见,它也将文本句点添加到列表中。

当然它会捕获所有句号,因为您允许它们出现在您的角色列表中。但是,要识别数字,您不能只检查单个字符,而是检查它们的组。您可以通过使用 regular expressions:

而简单地做到这一点
In [7]: re.findall("\d+(?:\.\d+)?", text)
Out[7]: ['2.7', '3', '306', '74.5', '90', '10', '15', '26']

(这只是一个示例,实际上您需要找到与您的用例匹配的模式,并且应该在使用 re.compile 之前编译它。)

那么你只需要转换结果:

In [8]: [float(x) for x in re.findall("\d+(?:\.\d+)?", text)]
Out[8]: [2.7, 3.0, 306.0, 74.5, 90.0, 10.0, 15.0, 26.0]