我正在尝试导入和处理带有标题的表,这些标题有时在 some 列中包含多行:
DFA Real
Estate Large Cap
U.S. Small U.S. Micro Securities International
Cap Portfolio Cap Portfolio Portfolio Portfolio
我无法将标题中每个(无限制)列中的行合并为一项(例如“美国小型股投资组合”,“美国微型股投资组合”等)。
什么是好的且强大的解决方案?
答案 0 :(得分:0)
由于所有标题均以不可见的空间作为边框对齐,因此您可以简单地找到这些公共空间,并使用它们将行划分为相应的标题。
首先将行填充到最长行的宽度,然后在标题的所有行之间找到空格的公共位置,根据这些位置对行进行切片,最后重新组装不只是字符串的切片空格。
from functools import reduce
header='''
DFA Real
Estate Large Cap
U.S. Small U.S. Micro Securities International
Cap Portfolio Cap Portfolio Portfolio Portfolio'''
lines = header.split('\n')
width = max(map(len, lines))
lines = [l + ' ' * (width - len(l)) for l in lines]
borders = list(reduce(set.intersection, [{i for i, c in enumerate(l) if c == ' '} for l in lines]))
print([' '.join(h).strip() for h in zip(*[[l[b:e].strip() for b, e in zip(borders[:-1], borders[1:])] for l in lines]) if any(h)])
这将输出:
['U.S. Small Cap Portfolio', 'U.S. Micro Cap Portfolio', 'DFA Real Estate Securities Portfolio']