我是Python的新手,我正在尝试在文件中找到一个单词并打印"整个"匹配行
exmaple.txt包含以下文字:
sh version
Cisco IOS Software, 2800 Software (C2800NM-IPBASE-M), Version 12.4(3h), RELEASE SOFTWARE (fc2)
sh inventory
NAME: "2811 chassis", DESCR: "2811 chassis, Hw Serial#: FHK1143F0WY, Hw
NAME: "High Speed Wan Interface card with 16 RS232 async ports(HWIC-16A)",
NAME: "High Speed Wan Interface card with 16 RS232 async ports(HWIC-16A)",
NAME: "16 Port 10BaseT/100BaseTX EtherSwitch"
要求: 找到字符串" Cisco IOS软件"如果发现打印完整的行。 找到" NAME:"在文件中,如果找到打印完整的行&计算出现次数
代码:
import re
def image():
file = open(r'C:\Users\myname\Desktop\Python\10_126_93_132.log', 'r')
for line in file:
if re.findall('Cisco IOS Software', line) in line:
print(line)
else:
print('Not able to find the IOS Information information')
def module():
file = open(r'C:\Users\myname\Desktop\Python\10_126_93_132017.log', 'r')
for line in file:
if re.findall('NAME:') in line:
print(line)
else:
print('No line cards found')
错误:
Traceback (most recent call last):
File "C:/Users/myname/Desktop/Python/copied.py", line 19, in <module>image()
File "C:/Users/myname/Desktop/Python/copied.py", line 5, in image if re.findall('Cisco IOS Software', line) in line:
TypeError: 'in <string>' requires string as left operand, not list
答案 0 :(得分:1)
可能这就是你要找的东西:
with open('some_file', 'r') as f:
lines = f.readlines()
for line in lines:
if re.search(r'some_pattern', line):
print line
break
顺便说一句:你的问题非常难以理解。在按下提问问题按钮之前,您应该检查如何以正确的方式发布问题。
答案 1 :(得分:0)
简单方法:
with open('yourlogfile', 'r') as fp:
lines = fp.read().splitlines()
c = 0
for l in lines:
if 'Cisco IOS Software' in l or 'NAME:' in l:
print(l)
if 'NAME:' in l: c += 1
print('\nNAME\'s count: ', c)
输出:
Cisco IOS Software, 2800 Software (C2800NM-IPBASE-M), Version 12.4(3h), RELEASE SOFTWARE (fc2)
NAME: "2811 chassis", DESCR: "2811 chassis, Hw Serial#: FHK1143F0WY, Hw
NAME: "High Speed Wan Interface card with 16 RS232 async ports(HWIC-16A)",
NAME: "High Speed Wan Interface card with 16 RS232 async ports(HWIC-16A)",
NAME: "16 Port 10BaseT/100BaseTX EtherSwitch"
NAME's count: 4