Python:将一个字符串解析为多个变量?

时间:2015-04-02 10:00:33

标签: python parsing

我很确定这有一个功能,但我一直在寻找,所以决定只是问SO。

我正在编写一个Python脚本,用于解析和分析输入文件中的文本消息。每一行都是这样的:

  

2014年10月24日,19:20 - 李怀特:你好世界!

或:

  

4月4日19:20 - 李怀特:你好世界!

如果未提及日期时间中的年份,则表示该消息是在当前年度中发送的。

我想要做的是将此字符串解析为多个变量。理想情况下,我正在寻找一个函数,它接受输入字符串,格式字符串和几个变量来存储输出:

foo(input, "MMM DD, YYYY, HH:MM - Sender: Text", &mon, &day, &year, &hour, &minutes, &sender, &text)

Python中是否存在这样的事情?

2 个答案:

答案 0 :(得分:3)

这使用非常有用的dateutil库来简化日期解析 - 您可以pip install python-dateutileasy_install python-dateutil。拆分:-上的数据以获取邮件和发件人,然后处理日期文本以获取datetime对象,您可以在其中访问其各种属性以获取所需的组件,例如:

from dateutil.parser import parse

s = 'Apr 4, 19:20 - Lee White: Hello world!'
fst, _, msg = s.rpartition(': ')
date, _, name = fst.partition(' - ')
date = parse(date)
name, msg, date.year, date.month, date.day, date.hour, date.minute
# ('Lee White', 'Hello world!', 2015, 4, 4, 19, 20)

答案 1 :(得分:0)

可以使用方法strptime():

import time

strn = 'Apr 4, 19:20 - Lee White: Hello world!'

try:
    date = time.strptime(strn.split(' - ')[0],'%b %d, %Y, %H:%M')
    year = date.tm_year
except ValueError:
    date = time.strptime(strn.split(' - ')[0],'%b %d, %H:%M')
    year = time.asctime().split()[-1]

sender = strn.split('- ')[1].split(':')[0]
text = strn.split(': ')[1]

date.tm_mon, date.tm_mday, year, date.tm_hour, date.tm_min, sender, text