在python中我需要一个逻辑用于以下场景我正在使用split函数。 我有一个包含输入的字符串,如下所示。
“ID674021384 25/01/1986 heloo嗨感谢5分钟和25-01-1988。”
“ID909900000 25-01-1986你好10分钟。”
输出应如下所示,将日期格式替换为“日期”,将时间格式替换为“时间”。
“ID674021384 date hello hi thanks time date。”
“ID909900000日期问候时间。”
此外,我需要为每个Id计算日期和时间,如下所示
ID674021384日期:2时间:1
ID909900000日期:1时间:1
答案 0 :(得分:2)
>>> import re
>>> from collections import defaultdict
>>> lines = ["ID674021384 25/01/1986 heloo hi thanks 5 minutes and 25-01-1988.", "ID909900000 25-01-1986 hello 10 minutes."]
>>> pattern = '(?P<date>\d{1,2}[/-]\d{1,2}[/-]\d{4})|(?P<time>\d+ minutes)'
>>> num_occurences = {line:defaultdict(int) for line in lines}
>>> def repl(matchobj):
num_occurences[matchobj.string][matchobj.lastgroup] += 1
return matchobj.lastgroup
>>> for line in lines:
text_id = line.split(' ')[0]
new_text = re.sub(pattern,repl,line)
print new_text
print '{0} DATE:{1[date]} Time:{1[time]}'.format(text_id, num_occurences[line])
print ''
ID674021384 date heloo hi thanks time and date.
ID674021384 DATE:2 Time:1
ID909900000 date hello time.
ID909900000 DATE:1 Time:1
答案 1 :(得分:1)
为了解析类似的文本行,比如日志文件,我经常使用re
模块使用正则表达式。虽然split()
也适用于分隔不包含空格和日期部分的字段,但使用正则表达式还可以确保格式符合您的预期,如果需要警告您奇怪的输入线。
使用正则表达式,您可以获取日期和时间的各个字段,并从中构建date
或datetime
个对象(均来自datetime
模块)。一旦拥有了这些对象,就可以将它们与其他类似对象进行比较,并编写新条目,根据需要格式化日期。我建议解析整个输入文件(假设你正在读取文件)并编写一个全新的输出文件而不是试图改变它。
至于跟踪日期和时间计数,当您的输入不是太大时,使用字典通常是最简单的方法。当您遇到具有特定ID的行时,请在字典中找到与此ID对应的条目,否则为其添加新条目。此条目本身可以是使用日期和时间作为键的字典,其值是每个遇到的计数。
我希望这个答案能指导您找到解决方案,即使它不包含任何代码。
答案 2 :(得分:0)
您可以使用几个正则表达式:
import re
txt = 'ID674021384 25/01/1986 heloo hi thanks 5 minutes and 25-01-1988.'
retime = re.compile('([0-9]+) *minutes')
redate = re.compile('([0-9]+[/-][0-9]+[/-][0-9]{4})')
# find all dates in 'txt'
dates = redate.findall(txt)
print dates
# find all times in 'txt'
times = retime.findall(txt)
print times
# replace dates and times in orignal string:
newtxt = txt
for adate in dates:
newtxt = newtxt.replace(adate, 'date')
for atime in times:
newtxt = newtxt.replace(atime, 'time')
输出如下:
Original string:
ID674021384 25/01/1986 heloo hi thanks 5 minutes and 25-01-1988.
Found dates:['25/01/1986', '25-01-1988']
Found times: ['5']
New string:
ID674021384 date heloo hi thanks time minutes and date.
Dates and times found:
ID674021384 DATE:2 TIME:1
克里斯