如何循环从 python-docx 获得的列表列表,其中每个列表都是一个 table 并将 table 写入单独的工作表

How to loop lists of list obtained from python-docx where each list is a table and write the tables into a seperate worksheets

我正在使用 python-docx 从文档中提取两个 table。 我迭代了 tables 并创建了一个列表列表。每个单独的列表代表一个 table,其中每行都有字典。每个字典都包含一个键/值对。键是 table 中的列标题,值是该列该行数据的单元格内容。 我在为每个 table 创建数据框并将每个 table 写在单独的 excel sheet.

上时遇到困难
from docx.api import Document
import pandas as pd
import csv
import json
import unicodedata

document = Document('Sampletable1.docx')
tables = document.tables
print (len(tables))
big_data = []


for table in document.tables:
    data = []
    Keys = None
    for i, row in enumerate(table.rows):
        text = (cell.text for cell in row.cells)
        if i == 0:
            keys = tuple(text)
            continue
        dic = dict(zip(keys, text))
        data.append(dic)
    big_data.append(data)
 print(big_data)

以上代码的输出为:

2

[[{'Asset': 'Growth investments', 'Target investment mix': '66.50%', 'Actual investment mix': '66.30%', 'Variance': '- 0.20%'}, {'Asset': 'Defensive investments', 'Target investment mix': '33.50%', 'Actual investment mix': '33.70%', 'Variance': '0.20%' }], [{'Owner': 'REST Super', 'Product': 'Superannuation', 'Type': 'Existing', 'Status': 'Existing', 'Customer 2': 'Customer 1'}, {'Owner': 'TWUSUPER TransPension', 'Product': 'TTR Pension', 'Type': 'New', 'Status': 'New', 'Customer 2': 'Customer 1'}, {'Owner': 'TWUSUPER', 'Product': 'Superannuation', 'Type': 'Existing', 'Status': 'Existing'}]]

如何访问以上列表?

此外,我尝试创建一个 pandas 数据框

#write the data into a data frame
for thing in big_data:
    #print(thing)
    df = pd.DataFrame(thing)
    print(df)
    writer = pd.ExcelWriter('dftable3.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1')
    writer.save()

我在 excel 上获得了第一个 table,但无法使用第二个 table。 我希望 table 位于同一个 excel 工作簿 (dftable3.xlsx) 中,但位于不同的工作簿中 sheets(Sheet1,Sheet2)

我附上了 tables 的图像。

提前致谢

How do I access the above lists??

您已经这样做了,遍历它们或打印它们。 考虑使用漂亮打印库:

import pprint
pprint.pprint(big_data)

I am expecting ... different worksheets(Sheet1,Sheet2)

好吧,鉴于您提供的常量 'Sheet1' 参数,这不太可能。 这是实现此目的的一种方法:

writer = pd.ExcelWriter('dftable3.xlsx', engine='xlsxwriter')
for i, thing in enumerate(big_data):
    df = pd.DataFrame(thing)
    df.to_excel(writer, sheet_name=f'Sheet{i}')
writer.save()

注意 writer 的范围——它必须比每个组成部分 df 的寿命更长。