我很确定这有一个功能,但我一直在寻找,所以决定只是问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中是否存在这样的事情?
答案 0 :(得分:3)
这使用非常有用的dateutil
库来简化日期解析 - 您可以pip install python-dateutil
或easy_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