Python 3.X 尝试读取文件时提取了太多的 IP 地址
Python 3.X pulling too many ip addresses when trying to read file
我有一份来自 Nmap 的扫描报告。我正在尝试获取仅属于特定 IP 地址的信息。我正在尝试为这部分代码提取 IP 地址,稍后我将处理下一部分代码。我认为这与IP地址末尾的\n
字符有关。我需要代码来说明我想要这个 IP 地址,而且只需要这个 IP 地址。非常感谢任何帮助。
#Python3.X
target_ip = "10.10.100.1"
fhand = open('ScanTest.txt','r')
for line in fhand:
line = line.rstrip()
if line.startswith('Nmap scan report for')and (target_ip):
print(line)
我的结果是
Nmap scan report for 10.10.100.1
Nmap scan report for 10.10.100.2
Nmap scan report for 10.10.100.100
Nmap scan report for 10.10.100.101
Nmap scan report for 10.10.100.103
Nmap scan report for 10.10.100.102
我想你需要换行……
if line.startswith('Nmap scan report for')and (target_ip):
……到……
if line.startswith('Nmap scan report for') and (line.split(' ')[4] == target_ip):
您的代码匹配太多,因为非空字符串总是 True
,因此您的代码打印了 所有 以 "Nmap..."
开头的行。
and
之后如何正确编写测试?你用的是字符串方式startswith
,但是还有endswith
...
我还冒昧地将请求的常量移出循环,
target_ip = "10.10.100.1"
begins = "Nmap scan report for"
fhand = open('ScanTest.txt','r')
for line in fhand:
line = line.rstrip()
if line.startswith(begins) and line.endswith(target_ip):
print(line)
从您发布的输出来看,startswith
和 endswith
意味着该行正好等于 "Nmap scan report for 10.10.100.1
"...
计算文件中有多少固定行可能更有趣(下面是惯用的Python计算匹配的数量,它有效因为不匹配的算术值为 0
而匹配的算术值为 1
)
count = sum(line==target_line for line in fhand)
或者在文件中也有位置可能很有趣
count = 0
for n, line in enumerate(fhand):
if line==target_line:
print("%8d %s"%(n, line))
count = count+1
print(n, "matches found.")
我有一份来自 Nmap 的扫描报告。我正在尝试获取仅属于特定 IP 地址的信息。我正在尝试为这部分代码提取 IP 地址,稍后我将处理下一部分代码。我认为这与IP地址末尾的\n
字符有关。我需要代码来说明我想要这个 IP 地址,而且只需要这个 IP 地址。非常感谢任何帮助。
#Python3.X
target_ip = "10.10.100.1"
fhand = open('ScanTest.txt','r')
for line in fhand:
line = line.rstrip()
if line.startswith('Nmap scan report for')and (target_ip):
print(line)
我的结果是
Nmap scan report for 10.10.100.1
Nmap scan report for 10.10.100.2
Nmap scan report for 10.10.100.100
Nmap scan report for 10.10.100.101
Nmap scan report for 10.10.100.103
Nmap scan report for 10.10.100.102
我想你需要换行……
if line.startswith('Nmap scan report for')and (target_ip):
……到……
if line.startswith('Nmap scan report for') and (line.split(' ')[4] == target_ip):
您的代码匹配太多,因为非空字符串总是 True
,因此您的代码打印了 所有 以 "Nmap..."
开头的行。
and
之后如何正确编写测试?你用的是字符串方式startswith
,但是还有endswith
...
我还冒昧地将请求的常量移出循环,
target_ip = "10.10.100.1"
begins = "Nmap scan report for"
fhand = open('ScanTest.txt','r')
for line in fhand:
line = line.rstrip()
if line.startswith(begins) and line.endswith(target_ip):
print(line)
从您发布的输出来看,startswith
和 endswith
意味着该行正好等于 "Nmap scan report for 10.10.100.1
"...
计算文件中有多少固定行可能更有趣(下面是惯用的Python计算匹配的数量,它有效因为不匹配的算术值为 0
而匹配的算术值为 1
)
count = sum(line==target_line for line in fhand)
或者在文件中也有位置可能很有趣
count = 0
for n, line in enumerate(fhand):
if line==target_line:
print("%8d %s"%(n, line))
count = count+1
print(n, "matches found.")