如何在python中解析docx文件?

pepwfjgg  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(404)

下面是我的代码:

v_excel= []
 for root, dirs, files in os.walk(paths):
     for t in files:
         if t.endswith('.xlsx'):   
             df = pd.read_excel(os.path.join(paths,t), header=None, index_col=False)
             v_excel.append(df)

conc = pd.concat(v_excel, axis=1, ignore_index=True)

浓度输出:


# after appending two excel files i can successively concat the files and put it in

# seperate column

column1   column2
data1     data1 
data2     data2
data3     data3
data3     data4

# column 1 is from excel file 1 and column2 from excel file 2

如何像处理excel一样处理docx?

if t.endswith('.docx'):
    #for c,z in enumerate(t):
        v_doc.append(Document(t))  # <-----how to put this in df and concat according to 
                                   #       docx file as i have done with excel ?

docx包含:#docx包含伪文本!!!


# docx1 contains:

data1
data2
data3
data4

# docx2 contains:

data5
data6
data7
data8

我想将docx文件的内容保存到excel的列中。将docx 1内容添加到excel的第1列,将docx 2添加到同一excel的第2列。
希望我能得到一些回应。先谢谢你。

rbpvctlc

rbpvctlc1#

解决方案#1:将多个.docx文档聚合为单个输出docx文档。
如果希望将文本和样式从docx文档集合复制到单个输出docx,则可以使用pythondocx模块。

from docx import Document
import os

master = Document()
for f in os.listdir('.'):
    if f.endswith('.docx'):
        doc = Document(f)
        for p in doc.paragraphs:
            out_para = master.add_paragraph()
            for run in p.runs:                
                output_run = out_para.add_run(run.text)
                # copy style from old to new
                output_run.bold = run.bold
                output_run.italic = run.italic
                output_run.underline = run.underline
                output_run.font.color.rgb = run.font.color.rgb
                output_run.style.name = run.style.name

master.save('out.docx')

解决方案2:将多个.docx文档中的表内容聚合到单个输出excel文档中。
在注解中,您希望从一组具有文本表的word文档创建excel工作表。
下面是将word文档表中的单元格复制到目标excel文档的python代码。

import pandas as pd
from docx import Document
import os

df = None
for f in os.listdir('data'):
    if f.endswith('.docx'):
        doc = Document(file)
        for table in doc.tables:
            for row in table.rows:
                data = []
                for cell in row.cells:
                    data.append(cell.text)               
                if df is None:
                    df = pd.DataFrame(columns=list(range(1, len(data)+1)))
                df = df.append(pd.Series(data, index=df.columns),
                               ignore_index=True)

df.to_excel("output.xlsx")

解决方案#3:将多个.docx文档中的自定义表格内容聚合到具有2列表格的单个输出excel文档。
在您的特定示例数据中,表由3列或9列构成,因此如果希望在输出中保留2列,则需要将其他列的文本连接到单个值。

df = None
for f in os.listdir('data'):
    if f.endswith('.docx'):
        doc = Document(file)
        # iterate over all the tables
        for table in doc.tables:
            for row in table.rows:
                cells = row.cells
                if len(cells) > 1:
                    col1 = cells[0].text
                    # check if first column is not empty
                    if col1:
                        # concatenate text of cells to a single value
                        text = ''
                        for i in range(1, len(cells)):
                            if len(text) != 0:
                                text += ' '
                            text += cells[i].text
                        data = [cells[0].text, text]
                        if df is None:
                            df = pd.DataFrame(columns=['column1', 'column2'])
                        df = df.append(pd.Series(data, index=df.columns),
                                 ignore_index=True)

# save output

df.to_excel("output.xlsx")
ygya80vv

ygya80vv2#

您可以在python中将docxcompose转换为concat docx文件。您可以在docxcompose的pypi官方页面上阅读更多描述

相关问题