代码之家  ›  专栏  ›  技术社区  ›  Timothy Williams

在单词表中搜索某些文本Python docx

  •  2
  • Timothy Williams  · 技术社区  · 7 年前

    import numpy as np
    import pandas as pd
    from docx import Document
    
    ####    Time for some old fashioned user functions    ####
    def make_dataframe(f_name, table_loc):
        document = Document(f_name)
        tables = document.tables[table_loc]
    
        for i, row in enumerate(tables.rows):
            text = (cell.text for cell in row.cells)
            if i == 0:
                keys = tuple(text)
                continue
    
            row_data = dict(zip(keys, text))
            data.append(row_data)
        df = pd.DataFrame.from_dict(data)
        return df
    
    
    SHRD_filename = "SHRD - 12485.docx"
    SHDD_filename = "SHDD - 12485.docx"
    
    df_SHRD = make_dataframe(SHRD_filename,30)
    df_SHDD = make_dataframe(SHDD_filename,-60)
    

    因为文件是不同的(例如,SHRD有32个表,我要查找的是倒数第二个表,但SHDD文件有280个表,我要查找的是从末尾算起的第60个表。但情况可能并非总是这样。

    如何搜索文档中的表格并开始处理 cell[0,0] = 'Tag Numbers' .

    1 回复  |  直到 7 年前
        1
  •  4
  •   James    7 年前

    您可以遍历表并检查第一个单元格中的文本。我修改了输出以返回数据帧列表,以防找到多个表。如果没有符合条件的表,它将返回一个空列表。

    def make_dataframe(f_name, first_cell_string='tag number'):
        document = Document(f_name)
    
        # create a list of all of the table object with text of the
        # first cell equal to `first_cell_string`
        tables = [t for t in document.tables 
                  if t.cell(0,0).text.lower().strip()==first_cell_string]
    
        # in the case that more than one table is found 
        out = []
        for table in tables:
            for i, row in enumerate(table.rows):
                text = (cell.text for cell in row.cells)
                if i == 0:
                    keys = tuple(text)
                    continue
    
                row_data = dict(zip(keys, text))
                data.append(row_data)
            out.append(pd.DataFrame.from_dict(data))
        return out