从.txt文件中提取变量字符串

2024-09-30 20:17:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一个客户,他使用我们的一些设备并输出一个特定的字符串,我们将其用作诊断。你知道吗

然而,有问题的客户使用了自己的日志记录系统,该系统在输出文件中填充了许多与我们相关的随机内容。你知道吗

我要做的是在不同的位置提取一个变量字符串,并将这些提取的stings放入一个新的文本文件中。你知道吗

这是我要找的变量:

*X;3;194; 0;2;125;0;0012;32;0;261D3;??

如前所述,此文本可以随内容而变化,但始终以*X开头,通常不超过38个字符(包括空格和;

文本的一个例子是。。。你知道吗

2018-01-15 11:16:43.566 pid=2800 tid=17 ResultReader [INFO ] packet received: *X;3;194; 0;2;126;0;0012;32;0;26357;??
2018-01-15 11:16:43.566 pid=2800 tid=17 ResultReader [ERROR] Device reset - Critical error: BALL_IN_THE_SAME_DIRECTION_WITH_WHEEL_ROTOR
2018-01-15 11:16:43.567 pid=2800 tid=17 events [INFO ] EmitEvent - RolWheelStatusRelayMsg{PreviousPacket=Protocol: EXTENDED, State: FINISH_BETTING, GameCount: 194, WinningNumber: 0, WarningFlags: [BALL_IN_THE_SAME_DIRECTION_WITH_WHEEL_ROTOR], RotorSpeed: 12, RotorDirection: CLOCKWISE, ExtendedFlags: [ROTOR_RUNNING_AT_LEGAL_SPEED, ROTOR_ROTATING_CLOCKWISE], SpinCounter: 49, BallDirection: CLOCKWISE, BallSpeed: 12, BallInPocketPosition: -1, Packet=Protocol: EXTENDED, State: FINISH_BETTING, GameCount: 194, WinningNumber: 0, WarningFlags: [BALL_IN_THE_SAME_DIRECTION_WITH_WHEEL_ROTOR], RotorSpeed: 12, RotorDirection: CLOCKWISE, ExtendedFlags: [ROTOR_RUNNING_AT_LEGAL_SPEED, ROTOR_ROTATING_CLOCKWISE], SpinCounter: 50, BallDirection: CLOCKWISE, BallSpeed: 12, BallInPocketPosition: -1}
2018-01-15 11:16:44.067 pid=2800 tid=17 ResultReader [INFO ] packet received: *X;3;194; 0;2;126;0;0012;32;0;26357;??

中间的文本可以不同,但目标仍然是相同的。我不介意如何,但将需要执行不同的文件,可以和可能有不同的信息。(如果说得通的话)。你知道吗


Tags: thein文本info客户withpidwheel
2条回答

如果使用regex,下面的代码就可以了。。。你知道吗

/\*X.*\?\?/g

识别字符串的开头(\*X),然后匹配任意字符0次或多次(.*),直到出现双问号(\?\?). 你知道吗

最初的*字符和?符号被转义以防止其默认含义被解释。你知道吗

我可能会这样做:

import re

with open('logfile.txt') as f: # assuming your log file name is logfile.txt...
    for line in f:
        ret = re.search('X.{36,40}\n$', line) # Here I take all starting with X, 36 to 40 length string and ending with a newline
        if ret is None:
            continue
        extracted_var = ret.group(0).strip()
        print(extracted_var)

它输出的日志文件示例:

X;3;194; 0;2;126;0;0012;32;0;26357;??
X;3;194; 0;2;126;0;0012;32;0;26357;??

相关问题 更多 >