如何处理.txt表中的无界多行标题

时间:2018-07-16 09:16:53

标签: python string

我正在尝试导入和处理带有标题的表,这些标题有时在 some 列中包含多行:

                                                                                         DFA Real
                                                                                          Estate     Large Cap
                                                             U.S. Small    U.S. Micro   Securities International
                                                            Cap Portfolio Cap Portfolio Portfolio    Portfolio

我无法将标题中每个(无限制)列中的行合并为一项(例如“美国小型股投资组合”,“美国微型股投资组合”等)。

什么是好的且强大的解决方案?

1 个答案:

答案 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']