使用Python查找不同行上的2个相关字符串

时间:2017-06-02 19:50:14

标签: python

我编写了一个程序,在迭代通过收集信息的许多设备后,在大文件中输出数据 来自新设备的新信息会附加到此文件中,因此它基本上是一个大文件,每10行左右会有相似(但不完全相同)的相同信息。

我需要做的是查找一个特定的字符串(在这种情况下,我在一个特殊的字符中工作,用于在大文件的每次迭代中用于识别),然后获取该特定字符后面的文本识别字符,2行向下。布朗尼指出,如果它允许我检查这是否是我正在寻找的正确数据(即包含“版本”一词)。

例如,文本文件可能如下所示:

trying 1.1.1.1
connected to 1.1.1.1
username: xxxx
password: xxxx
>>2001
issue command y
y = version                                

以上文字将重复约100次,在“>>”之后列出唯一标识符。我需要在Python中做的是用文本打开文件,循环遍历它,找到'>>'并收集下面2行列出的版本。然后,我需要以一种显示'>> 2001 y =版本'的方式在屏幕上打印它们,一直循环到'>> 2099 y =版本'。

2 个答案:

答案 0 :(得分:0)

regular expression对此非常有用。例如:

# you'll want to load this from an actual file instead; 
# I'm just including it as a literal for example
file_contents = '''trying 1.1.1.1
connected to 1.1.1.1
username: xxxx
password: xxxx
>>2001
issue command y
y = version'''


# Summary of this regex: find and capture your ">>2001" line,
# followed by a line that doesn't get captured, followed by a line that gets captured
matches = re.compile('\n(>>\d+)\n.*\n(.*)\n?').findall(file) 
# matches should now be [('>>2001', 'y = version')]

for match in matches:
    print(match[0], match[1])`

欢迎来到正则表达的精彩世界!

您可以在regexpal

尝试使用此正则表达式

答案 1 :(得分:0)

您可以将文件读入列表并通过列表loop查找您的标识符,然后打印所需的项目。例如:

<强>代码:

with open('test.txt', 'r') as f:
    data = f.read().splitlines()
    for line in data:
        if line.startswith('>>'):
            print line, data[data.index(line)+2]

输入文件:

trying 1.1.1.1
connected to 1.1.1.1
username: xxxx
password: xxxx
>>2001
issue command y
y = version
>>2002
issue command y
y = versionx
>>2003
issue command y
y = versionz

<强>输出:

>>2001 y = version
>>2002 y = versionx
>>2003 y = versionz