我试图编写一个脚本,从SQLite3DB中提取数据,只输出感兴趣的特定数据。你知道吗
我编写了一个函数:
def get_ip(db_file):
cur = con.cursor()
cur.execute('select "Computer Name","User", "IP Address1", "IP Address2", "IP Address3", "IP Address4" from SepData')
ip_data = cur.fetchall()
cur.close()
return ip_data
产生:
[('user-PC1', 'upc1', '172.24.49.88', '0.0.0.0', '33.4.1.54', '0.0.0.0'), ('user-pc2', 'upc2', '64.24.49.90', '0.0.0.0', '0.0.0.0', '0.0.0.0'), ('user-pc3', 'upc3', '172.24.49.71', '0.0.0.0', '0.0.0.0', '0.0.0.0'), ('user-pc4', 'upc4', '172.24.89.101', '192.168.3.3', '0.0.0.0', '55.13.0.1'),]
我的意图是拉取全局/公共IP和与之相关的用户,并将这些数据存储为有序列表/dict。我认为可能存在重复条目,因此我认为唯一的方法是使用列表。你知道吗
如果用户只显示私有或不可路由的IP,则需要忽略此数据。你知道吗
最初,我试图在SQL查询中执行此操作,但这仅在REGEXP函数中是可行的,默认情况下,它不是sqlite3附带的,可能会导致其他人在使用脚本时遇到问题。我现在只使用pythonipaddress库来尝试这一点。我将元组列表转换为列表列表,并尝试以下操作:
pubips = ()
iplist = get_ip('dbfile')
itr = range(1,4)
for host, user, ipaddr1, ipaddr2, ipaddr3, ipaddr4 in zip(iplist):
for i in itr:
if ipaddr+i.is_global():
pubips.insert(user, ipaddr+i)
这段代码显然不起作用,但给出了我试图实现的总体想法。我正在努力想出一个干净的方法来做这件事,并将感谢任何反馈。谢谢你的阅读
我真的很感谢这些反馈,但经过一些单元测试后,我实际上创建了一个更好地回答我问题的解决方案:
我需要用户与ip的关系保持完整,所以我创建了一个dict,感谢您将我引导到正确的方向。你知道吗
我会做几件事,首先我会准备数据更好地只选择IP地址。你知道吗
接下来,您可以使用set和ipaddress来处理准备好的数据,以确保唯一性
有些人试图避免列表理解,因为它们可能会破坏自己的目的,变得不可读,但我认为这是一个适当的使用。你知道吗
相关问题 更多 >
编程相关推荐