我编写了一个程序,在迭代通过收集信息的许多设备后,在大文件中输出数据 来自新设备的新信息会附加到此文件中,因此它基本上是一个大文件,每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 =版本'。
答案 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