通过压缩doc(x)的正则表达式,但不提取- python

问题描述 投票:0回答:1

我需要找到存储在doc / docx文件中的特定文本,并将其转储到csv中。我的约束是:

a)doc / docx文件位于压缩存档中:我无法写入磁盘/我需要在内存中工作

b)我需要使用正则表达式查找特定文本,因此需要将doc / docx转换为.txt

理想情况下,我可以使用zipfile读取文件,将数据传递到某些doc-to-txt转换器(textract,docx2txt等),并在txt上使用正则表达式。可能看起来像

import zipfile
import textract
import re

    with zipfile.ZipFile(zip_archive, 'r') as f:
    for name in f.namelist():
        data = f.read(name)
        txt = textract.process(data).decode('utf-8')  
        #some regex on txt

这当然是行不通的,因为textract(以及任何其他doc(x)-to-txt转换器)的参数是文件路径,而“数据”是字节。使用“名称”作为自变量会给出MissingFileError,这可能是因为zip归档文件没有目录结构,而只是文件名模拟了路径。

是否有任何方法可以仅在内存中通过压缩的doc / docx文件进行正则表达式,而无需提取文件(并因此将它们写入磁盘)?

python regex docx zipfile doc
1个回答
0
投票

据我所知,用zipfile打开一个zip文件不会导致它将未压缩的文件写入任何临时文件。所以这应该全部在内存中。

import re
import zipfile

zf        = zipfile.ZipFile('/temp/example.docx')
data      = xmltodict.parse(zf.open('word/document.xml'))
some_text = text = data['w:document']['w:body']['w:p'][46]['w:r']['w:t']

print(some_text)

这里是MS的XML文件格式的参考:https://docs.microsoft.com/en-us/openspecs/office_standards/ms-docx/b839fe1f-e1ca-4fa6-8c26-5954d0abbccd

© www.soinside.com 2019 - 2024. All rights reserved.