[英]How can we extract specific test from the text in python
我有一个名为ABC的函数输出,如下所示:
19/09/09 10:34:37 INFO tool.ImportTool: --incremental append
19/09/09 10:34:37 INFO tool.ImportTool: --check-column DTIN
19/09/09 10:34:37 INFO tool.ImportTool: --last-value 2019-07-27 00:00:00.0
19/09/09 10:34:37 INFO tool.ImportTool: (Consider saving this with 'sqoop job --create')
我如何在python中获得--last-value
, 2019-07-27 00:00:00.0
将是动态的。
注意:我有大约100行数据作为输出,但是在这里我仅给出了最后4行。
预期--last-value = 2019-07-27 00:00:00.0
此处日期基于输出是动态的。
您可以使用字符串切片或正则表达式从输入中获取该日期。
字符串片段:
text = """19/09/09 10:34:37 INFO tool.ImportTool: --incremental append 19/09/09 10:34:37 INFO tool.ImportTool: --check-column DTIN 19/09/09 10:34:37 INFO tool.ImportTool: --last-value 2019-07-27 00:00:00.0 19/09/09 10:34:37 INFO tool.ImportTool: (Consider saving this with 'sqoop job --create')""" keyword = "--last-value" idx = text.index(keyword) + len(keyword) + 1 # keyword index + length of keyword + 1 (space) last_value = text[idx: text.index("\\n", idx)]
正则表达式 :
import re last_value = re.search(r"--last-value (.+)\\n", text).group(1)
正则表达式是您最好的朋友!
如果文件中出现了“ --last-value”,则必须使用re.findall()
而不是re.search()
来获取所有值,如以下代码所示:
import re
text = """19/09/09 10:34:37 INFO tool.ImportTool: --incremental append
19/09/09 10:34:37 INFO tool.ImportTool: --check-column DTIN
19/09/09 10:34:37 INFO tool.ImportTool: --last-value 2019-07-27 00:00:01.0
19/09/09 10:34:37 INFO tool.ImportTool: --last-value 2029-07-27 00:00:02.0
19/09/09 10:34:37 INFO tool.ImportTool: (Consider saving this with 'sqoop job --create')"""
sep = '--last-value '
regex = "%s(.+)\n" % sep
string_dates = re.findall(regex, text)
print(string_dates) # ['2019-07-27 00:00:01.0', '2029-07-27 00:00:02.0']
根据您的格式将string_dates
列表中的字符串转换为datetime
可能会很有用:
import re
from datetime import datetime as dt
date_format = '%Y-%m-%d %H:%M:%S.%f'
datetime_values = [dt.strptime(res, date_format) for res in string_dates]
我已经编写了原始的RegEx 。 您可以使用它从日志中获取相关行。
码:
import re
data = """19/09/09 10:34:37 INFO tool.ImportTool: --incremental append
19/09/09 10:34:37 INFO tool.ImportTool: --check-column DTIN
19/09/09 10:34:37 INFO tool.ImportTool: --last-value 2019-07-27 00:00:00.0
19/09/09 10:34:37 INFO tool.ImportTool: (Consider saving this with 'sqoop job --create')
19/09/09 10:34:37 INFO tool.ImportTool: --last-value 2019-08-08 04:02:99.2
"""
last_values = re.findall(r"--last-value [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]", data)
print(last_values)
输出:
>>> python3 test.py
['--last-value 2019-07-27 00:00:00.0', '--last-value 2019-08-08 04:02:99.2']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.