日期后分割输出

时间:2013-04-05 15:29:28

标签: python dictionary split whitespace

我有一个脚本以这种格式输出我的任务:

Thu Apr 04           Finish Work
                     Walk

Sat Apr 06           Collect NIC

Mon Apr 08           Run test

我想将它拆分成字典,以便我可以进行一些匹配/格式化:

{'Thu Apr 04' : ('Finish Work', 'Walk'),
'Sat Apr 06' : 'Collect NIC',
'Mon Apr 08' : 'Run test'}

我尝试过像split(),replace()这样的字符串函数,但是我无法获得我想要的格式。

更新#1

我将脚本的输出分配给变量并使用print repr(output),它给出了:

'\nThu Apr 04           Finish PTI Video\n                     Weigh In\n\nSat Apr 06           Collect NIC\n\nMon Apr 08           Serum uric acid test\n\n'

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

a = '\nThu Apr 04           Finish PTI Video\n                     Weigh In\n                         Eat out\n\nSat Apr 06           Collect NIC\n\nMon Apr 08           Serum uric acid        test\n\n'
b = {}
same_day = ''
for x in a.split('\n'):
    c = x.split('           ')
    if c[0] is '':
        for q in c:
            if q is not '':
                b.update({same_day: b[same_day] + ', ' + q.strip()})
                break
    else:
        same_day = c[0]
        b.update({c[0] : c[1]})
它很脏。但是会完成工作。 如果输入是文件,那么你可以使用readline来获取x

答案 1 :(得分:0)

假设您将原始脚本的输出(即您要解析的示例文本)保存在名为“schedule.txt”的文件中。

import re
with open("schedule.txt") as f:
    lines = f.readlines()
sched = {}
currday = None
for line in lines:
    newday = re.match(r'(\w+\s+\w+\s+\w+)\s+(.*)',line)
    if newday:
        currday = newday.group(1)
        sched[currday] = [newday.group(2)]
    elif currday:
        newact = re.match(r'\s+(.*)',line)
        if newact:
            sched[currday] = newact.group(1)

请注意,这会将条目保存为列表,而不是元组。但是,如果你真的需要元组,你可以在它们上面调用tuple()函数。