繁体   English   中英

我们如何从python文本中提取特定测试

[英]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-value2019-07-27 00:00:00.0将是动态的。

注意:我有大约100行数据作为输出,但是在这里我仅给出了最后4行。

预期--last-value = 2019-07-27 00:00:00.0此处日期基于输出是动态的。

您可以使用字符串切片或正则表达式从输入中获取该日期。

  1. 字符串片段:

     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)] 
  2. 正则表达式

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM