Python 从一个元素到另一个元素的块列表
Python chunk list from one element to another
我有以下代码:
for paragraph in document.paragraphs:
while paragraph.style.name == 'Heading 2':
print(paragraph.style.name)
print(paragraph.text)
这基本上行不通,因为我不知道如何适应正确的逻辑。
我正在使用 python docx 库 https://python-docx.readthedocs.io/en/latest/user/styles-using.html 遍历文档的段落。
现在,我想将段落列表拆分为从每个 Heading 2
开始的子列表,然后添加具有不同 paragraph.style.name
的所有下一段,直到下一个 Heading 2
元素,所以每个块将包含一个 Heading 2
段落及其相应的文本。
换句话说,我正在寻找一种将列表从一个元素拆分为另一个元素的块的方法。请帮助:)
您可以使用 itertools.groupby
来完成此操作:
from itertools import groupby
groups, next_group = [], []
for k, group in groupby(document.paragraphs, lambda x: x.style.name == 'Heading 2'):
# If the predicate is True and next_group is populated,
# we create a new chunk
if k and next_group:
groups.append(next_group)
next_group = []
# Fill up the current chunk
for paragraph in group:
# feel free to swap this out with a print statement
# or whatever data structure suits you
next_group.append({'style_name': paragraph.style.name, 'text': paragraph.text})
为了清楚起见,我在这里使用了字典列表,但您可以替换为任何数据结构
我有以下代码:
for paragraph in document.paragraphs:
while paragraph.style.name == 'Heading 2':
print(paragraph.style.name)
print(paragraph.text)
这基本上行不通,因为我不知道如何适应正确的逻辑。 我正在使用 python docx 库 https://python-docx.readthedocs.io/en/latest/user/styles-using.html 遍历文档的段落。
现在,我想将段落列表拆分为从每个 Heading 2
开始的子列表,然后添加具有不同 paragraph.style.name
的所有下一段,直到下一个 Heading 2
元素,所以每个块将包含一个 Heading 2
段落及其相应的文本。
换句话说,我正在寻找一种将列表从一个元素拆分为另一个元素的块的方法。请帮助:)
您可以使用 itertools.groupby
来完成此操作:
from itertools import groupby
groups, next_group = [], []
for k, group in groupby(document.paragraphs, lambda x: x.style.name == 'Heading 2'):
# If the predicate is True and next_group is populated,
# we create a new chunk
if k and next_group:
groups.append(next_group)
next_group = []
# Fill up the current chunk
for paragraph in group:
# feel free to swap this out with a print statement
# or whatever data structure suits you
next_group.append({'style_name': paragraph.style.name, 'text': paragraph.text})
为了清楚起见,我在这里使用了字典列表,但您可以替换为任何数据结构