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

问题描述 投票:0回答:2
 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 文件

它返回这个:

巴巴多巴和巴巴多巴 巴巴多巴 2.7 塔 3 与巴巴多巴 306 巴巴多。下一篇:没有了 � � � � � � � � � � � 巴尼奥和巴尼奥之间的关系。巴巴巴和巴巴和巴巴和巴巴。巴巴瑞巴尼亚德 巴巴巴瑞巴德 巴巴瑞巴德 巴巴巴瑞 巴巴德巴u200c巴巴德。巴布亚新几内亚和巴布亚新几内亚。巴巴利亚 74.5 比巴利亚 90 比巴巴 巴巴多。 于 10 月 15 日发布。 26 小时 26 小时

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

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

python python-docx
2个回答
1
投票

当然,它会捕获所有句点,因为您允许它们出现在角色列表中。不过,要识别数字,您不能只检查单个字符,还可以检查它们的组。您可以通过使用正则表达式:

来简单地做到这一点
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]

0
投票
import docx
from unidecode import unidecode

stack = []
num = []
arabicNumbers = ["١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩", "٠"]
persianNumbers = ["۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "۰"]
enNumbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.']
s = ''
doc = docx.Document('myDoD.docx')
s = ''.join(para.text for para in doc.paragraphs)
        
str_ = ''
for i in s:
    if i in arabicNumbers or i in persianNumbers or i.isnumeric() or i == '.' or i in '٫':
        if i == '٫':
            stack.append('.')
        else:
            stack.append(i)
    else:
        str_ = ''.join(i for i in stack)
        stack = []
        if str_ == '' or str_ == '.' or str_ ==  "٠" or str_ ==  "۰":
            pass
        else:
            num.append(float(unidecode(str_)))
print(sum(num))
© www.soinside.com 2019 - 2024. All rights reserved.