亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我們如何從python中的文本中提取特定的測試

我們如何從python中的文本中提取特定的測試

慕標琳琳 2022-05-24 15:43:25
我有一個名為 ABC 的函數的輸出,如下所示:19/09/09 10:34:37 INFO tool.ImportTool:  --incremental append19/09/09 10:34:37 INFO tool.ImportTool:   --check-column DTIN19/09/09 10:34:37 INFO tool.ImportTool:   --last-value 2019-07-27 00:00:00.019/09/09 10:34:37 INFO tool.ImportTool: (Consider saving this with 'sqoop job --create')我怎樣才能進入--last-valuepython ,2019-07-27 00:00:00.0將是動態的。注意:我有大約 100 行數據作為輸出,但在這里我只給出了最后 4 行。此處預期--last-value = 2019-07-27 00:00:00.0 的日期是基于輸出的動態。
查看完整描述

3 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

您可以使用字符串切片或正則表達式從輸入中獲取此日期。


字符串切片:


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)


查看完整回答
反對 回復 2022-05-24
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

正則表達式是你最好的朋友!


如果文件中多次出現“--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]


查看完整回答
反對 回復 2022-05-24
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

我寫了一個原始的 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']


查看完整回答
反對 回復 2022-05-24
  • 3 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號