我有一个名为“IP”的IP地址文件。当我从日志中解析新IP时,我想在添加之前查看新IP是否已经在文件IP中。我知道如何将新IP添加到文件中,但我无法查看新IP是否已存在于文件中。
!/usr/bin/python
from IPy import IP
IP = IP('192.168.1.2')
#f=open(IP('IPs', 'r')) #This line doesn't work
f=open('IPs', 'r') # this one doesn't work
for line in f:
if IP == line:
print "Found " +IP +" before"
f.close()
在“IP”文件中,每个IP地址都在它自己的行上。就这样:
222.111.222.111
222.111.222.112
还尝试将文件IP放入数组中,但也没有好运。 有什么想法吗?
谢谢,
加里
答案 0 :(得分:3)
iplist = []
# With takes care of all the fun file handling stuff (closing, etc.)
with open('ips.txt', 'r') as f:
for line in f:
iplist.append(line.strip()) # Gets rid of the newlines at the end
# Change the above to this for Python versions < 2.6
f = open('ips.txt', 'r')
for line in f:
iplist.append(line.strip())
f.close()
newip = '192.168.1.2'
if newip not in iplist:
f = open('ips.txt', 'a') # append mode, please
f.write(newip+'\n')
现在你已将你的IP列在一个列表中(iplist),你可以轻松地将你的新文件添加到它iplist.append(newip)
或做任何你喜欢的事情。
编辑:
一些用于学习Python的优秀书籍: 如果你担心编程很困难,有一本专门针对孩子的书,但老实说,我发现这本书既易于理解又能提供丰富的信息。 Snake Wrangling for Kids
学习Python的另一个重要资源是How to Think Like a Computer Scientist。
官方Python网站上还有tutorial。与之前相比,它有点干。
Alan Gauld是tutor@python.org邮件列表的最重要贡献者之一,this tutorial非常好,也适用于Python 3.他还包含一些其他语言供比较。
如果你想要一本好的死树书,我听说Wesley Chun的Core Python Programming是一个非常好的资源。他也经常为python导师列表做出贡献。
tutor list是了解python的另一个好地方 - 阅读,回复和提出自己的问题。我实际上通过尝试回答尽可能多的问题来学习我的大部分python。如果你想学习Python,我会认真地推荐订阅导师列表。
答案 1 :(得分:2)
这是一个简单的代码,但我认为它在Python中简短而漂亮,所以这就是我如何写它:
ip = '192.168.1.2'
lookFor = ip + '\n'
f = open('ips.txt', 'a+')
for line in f:
if line == lookFor:
print 'found', ip, 'before.'
break
else:
print ip, 'not found, adding to file.'
print >>f, ip
f.close()
它以追加模式打开文件,读取并且如果找不到(这是else
到for
的作用 - 如果循环正常退出而不是通过中断执行) - 附加新IP。当当!
当你拥有大量IP时,现在效果不佳。这是我想到的另一个黑客,它每1个IP使用1个文件作为标志:
import os
ip = '192.168.1.2'
fname = ip + '.ip'
if os.access(fname, os.F_OK):
print 'found', ip, 'before.'
else:
print ip, 'not found, registering.'
open(fname, 'w').close()
为什么这么快?因为现在大多数文件系统(除了Windows上的FAT但NTFS没问题)将目录中的文件列表组织成B树结构,因此检查文件存在是一个快速操作O(log N)而不是枚举整个名单。
(我不是说这是实际的 - 取决于你期望看到的IP数量和你的系统管理员的仁慈。)
答案 2 :(得分:1)
为什么你需要这个IP的东西?使用简单的字符串。
!#/usr/bin/env python
ip = "192.168.1.2" + "\n" ### Fixed -- see comments
f = open('IPs', 'r')
for line in f:
if line.count(ip):
print "Found " + ip
f.close()
此外,这看起来更像是grep
和朋友的任务。