【问题标题】:Python splitting columns with variable spacingPython以可变间距拆分列
【发布时间】:2016-11-12 15:55:14
【问题描述】:

我正在尝试解析具有由单个空格和多个空格分隔的列的表。我可以使用 re.split 来分隔超过 1 个空格的列,但随后必须重新拆分由单个空格分隔的列。下面的代码通过多次拆分第 4 列和第 5 列来实现这一点,但是有没有更好或更有效的方法来做到这一点?

我正在使用下面的方法,似乎效率低下:

我的代码:

import re

string = '''No  Mon     Date           Time Values   colors
1   Nov     11-03-2016     23:17:52 Red   colors
2   Nov     11-03-2016     19:18:00 Yellow   colors
3   Nov     11-03-2016     19:18:18 Blue   colors
4   Oct     10-03-2016     19:22:58 Orange Green   colors
5   Oct     10-07-2016     10:37:36 Red Blue Yellow   colors
6   Oct     10-07-2016     10:37:36 White   colors
7   Sep     09-07-2016     10:37:37 Ping White Yellow Green   colors'''

for i in string.splitlines():
    col1 =re.split(r'\s{2,}', i)[0]
    col2 =re.split(r'\s{2,}', i)[1]
    col3 = re.split(r'\s{2,}', i)[2]
    col4 = re.split(r'\s{2,}', i)[3].split()[0]
    col5 = ' '.join(re.split(r'\s{2,}', i)[3].split()[1:])

    print('{:3} | {:3} | {:10} | {:10} | {:23}|'.format(col1, col2, col3, col4, col5))

输出:

No  | Mon | Date       | Time       | Values                 |
1   | Nov | 11-03-2016 | 23:17:52   | Red                    |
2   | Nov | 11-03-2016 | 19:18:00   | Yellow                 |
3   | Nov | 11-03-2016 | 19:18:18   | Blue                   |
4   | Oct | 10-03-2016 | 19:22:58   | Orange Green           |
5   | Oct | 10-07-2016 | 10:37:36   | Red Blue Yellow        |
6   | Oct | 10-07-2016 | 10:37:36   | White                  |
7   | Sep | 09-07-2016 | 10:37:37   | Ping White Yellow Green|

【问题讨论】:

    标签: python regex python-3.x split


    【解决方案1】:

    您可以先在单个 split 操作中获取 4 个值,然后使用 \s{2,} 拆分第 4 个元素:

    for i in string.splitlines():
        arr = re.split(r'\s+', i, 4)
        print('{:3} | {:3} | {:10} | {:10} | {:23}|'.
              format(arr[0], arr[1], arr[2], arr[3], re.split(r'\s{2,}', arr[4])[0]))
    
    No  | Mon | Date       | Time       | Values                 |
    1   | Nov | 11-03-2016 | 23:17:52   | Red                    |
    2   | Nov | 11-03-2016 | 19:18:00   | Yellow                 |
    3   | Nov | 11-03-2016 | 19:18:18   | Blue                   |
    4   | Oct | 10-03-2016 | 19:22:58   | Orange Green           |
    5   | Oct | 10-07-2016 | 10:37:36   | Red Blue Yellow        |
    6   | Oct | 10-07-2016 | 10:37:36   | White                  |
    7   | Sep | 09-07-2016 | 10:37:37   | Ping White Yellow Green|
    

    Code Demo

    【讨论】:

    • 感谢您的回复。是的,这确实简化了一点并减少了代码。谢谢。
    猜你喜欢
    • 2020-05-15
    • 2010-11-08
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2017-08-02
    • 2022-01-07
    相关资源
    最近更新 更多