来自python的新手(以及一般脚本)的两部分问题:
我已经研究了如何从文件中获取IP地址列表,然后将一组唯一的IP输出到文件中,如下所示:
ip_list = []
with open('testfile', 'r') as file:
for line in file:
if line not in ip_list:
ip_list.append(line)
with open('testoutput', 'w') as file:
for line in ip_list:
file.write("%s\n" % line)
然后我看到我可以这样做另一种方式,我想知道这是否合理?
ip_list = []
with open('testfile', 'r') as file:
for line in file:
ip_list.append(line)
with open('testoutput', 'w') as file:
for line in set(ip_list):
file.write("%s\n" % line)
接下来,我现在想得到一个与PERMIT / DENY字符串结合的IP地址列表,因为打开的文件是这样的:
1.1.1.1 PERMIT
2.2.2.2 PERMIT
3.3.3.3 DENY
1.1.1.1 PERMIT
我仍然只想输出唯一的IP,所以我可以使用第一种方法:
ip_list = []
with open('testfile', 'r') as file:
for line in file:
elements = line.split(' ')
if elements[0] not in ip_list
ip_list.append(elements)
with open('testoutput', 'w') as file:
for line in ip_list:
file.write("%s %s\n" % (line[0], line[1]))
但是我可以使用set命令代替吗?或者我可以做一些比上面的片段更好的东西吗? 对于这个例子,假设我不想比较整行的唯一性(即' 1.1.1.1 PERMIT')
答案 0 :(得分:1)
您可以执行以下操作:
ip_set = set()
ip_list = []
with open('testfile', 'r') as file:
for line in file:
elements = line.split()
ip = elements[0]
if ip not in ip_set
ip_set.add(ip)
ip_list.append(elements)
with open('testoutput', 'w') as file:
for line in ip_list:
file.write("%s %s\n" % (line[0], line[1]))
请注意,我将参数移除到split()
,以便它可以处理所有空格,而不仅仅是空格。