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

gmxoilav  于 2023-08-02  发布在  Python
关注(0)|答案(2)|浏览(86)
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 م ر س د。مه م ت ر ب ن م ه ا ل ن ا ن و ر,ه ا ل عم و د ب ت ر ب ي ر و ب ي ر م-ن ا ر ن ن ا س س ت ه د ر ن اح ب ي ت ا ل ع ر ب ي ت ر ب ي ن ا س ت。ای ن جا ن و ر د ا ر ا ی ب د ن ی عضلا ن ی و پاها ی ی ب س ی ا ر ن ی ر ومن د ا ست. ordered د ن ب ر د ا ر ا ordered م و ه ا ordered بلن د و ب ر ا س ب ر ن,ه م ر ا ه ب ا ه ا orderstudent ا ه عم و د م ب ا ل د. جثّه ٔ ب ب ر ه ا ی ن ر ب ز ر گ ‌ ت ر ا ز ب ب ر ه ا ی م ا د ه است و ه مچن ی ن م و ه ا ی ر و ی گ و ن ه ٔ ب ب ر ن ر بلن د ت ر ا ز ب ب ر م ا د ه م ی ‌ ب اشد. دن د ا ن‌ها ی ب ب ر ب س ی ا ر قو ی ا س ت و د ر می ا ن جا ن و ر ا ن خشکی بلن د ت ر ی ن ا س ت. 74.5%的人认为这是一个错误。10تا15 سا ل ع م ر م ن د。26 student ا ل ا ر ح د ا ل عمر ب ي ت ح د و د ر ب ا ل ع ر ب ي و ح ا 26 student ا ل ا ر ح د ه ا س ت。
['2','.',' 7','3',' 3','0',' 6','.',' 7','4','.','5',' 9','0','.','1',' 0','1',' 5','.',' 2','6','.']
正如你所看到的,它还向列表中添加了文本的句点。

eqoofvh9

eqoofvh91#

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

In [7]: re.findall("\d+(?:\.\d+)?", text)
Out[7]: ['2.7', '3', '306', '74.5', '90', '10', '15', '26']

字符串
(That这只是一个例子,实际上您需要找到一个与您的用例相匹配的模式,并且应该在使用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]

rslzwgfq

rslzwgfq2#

import docx
from unidecode import unidecode

queue = []
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 == '٫':
            queue.append('.')
        else:
            queue.append(i)
    else:
        str_ = ''.join(i for i in queue)
        queue= []
        if str_ == '' or str_ == '.' or str_ ==  "٠" or str_ ==  "۰":
            pass
        else:
            num.append(float(unidecode(str_)))
print(num)

字符串

相关问题