热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python对ip段处理

需求:ip段20.20.20.20-20.21.11.11插入数据库-------------------------------------------------------写下来

需求:  ip段 20.20.20.20-20.21.11.11 插入数据库

-------------------------------------------------------

写下来供以后重用或有需要的同行~

#生成下一次循环的边界条件
def get_side(pos,now):
    global begin,end
    global first,last

    #   find_side                   #
    #---------in---------------
    #begin 110.67.1.95 end 111.67.1.95
    #first 110.x.x.x   last 111.x.x.x
    #pos 110 now 0
    #---------out--------------
    #first 110.67.x.x  last 111.255.x.x
    #                               #
    find_side = lambda begin, end, pos, fisrt, last, now:\
                ( pos == first[now] and begin[now + 1] or 1, pos == last[now] and end[now + 1] or 255)

    first[now + 1],last[now + 1] = find_side(begin,end,pos,first,last,now)
    return range(first[now + 1],last[now + 1] + 1)


def gen_ip(ip):
    '''
    in in 110.67.1.30-110.67.1.32
    out '{"110.67.1.30", "110.67.1.31", "110.67.1.33"}'
    '''
    #ip段范围
    global begin, end
    #临时列表,存储边界条件
    global first, last
    sides = ip.split('-')
    begin = map(lambda x:int(x),sides[0].split('.'))
    end   = map(lambda x:int(x),sides[1].split('.'))

    first[0] = begin[0]
    last[0] = end[0]
    ip_str = "'{%s}'"
    tmp = ""

    for pos_one in range(begin[0],end[0] + 1):
        for pos_two in get_side(pos_one,0):
            for pos_three in get_side(pos_two,1):
                for pos_four in get_side(pos_three,2):
                    str = '"%d.%d.%d.%d",' % (pos_one, pos_two, pos_three, pos_four)
                    tmp += str

    return ip_str % tmp.rstrip(',')

思路为从ip起始段的首位开始循环,共4层循环。 

整个转换需要注意的问题只有一个, 如何在循环内正确的处理边界值。

例如 10.10.10.10-10.10.20.1

在第三个字段应该分别进行如下循环:  10.10 - 10.255; 11.1 -11.255 .... 19.255;  20.1

考虑一下,这里其实分为三种情况,当前循环的是起始、过渡和终止字段。

因此#14 行做了两个三元操作,大致类似于  pos == from ? begin+1 : 1, pos == to ? end + 1 :255

实现了根据当前循环内容与起始段、终止段是否一致,写入对应的边界

当然,在特殊情况下1. ip前两段不同,后两段一致时 会导致缺少部分数据,不过因为这次我在项目里用到的IP范围不可能达到后面这个范围,因此忽略了这个bug。


推荐阅读
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • 基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 这是一个愚蠢的问题,但我只是对此感到好奇.假设我在Pythonshell,我有一些我查询的数据库对象.我做:db.query(的queryString)该查询在0xffdf842c ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 【Python 爬虫】破解按照顺序点击验证码(非自动化浏览器)
    #请求到验证码base64编码json_img_datajson_raw.get(Vimage)#获取到验证码编码 #保存验证码图片到本地defbase64_to_img(bstr ... [详细]
  • 语义分割系列3SegNet(pytorch实现)
    SegNet手稿最早是在2015年12月投出,和FCN属于同时期作品。稍晚于FCN,既然属于后来者,又是与FCN同属于语义分割网络 ... [详细]
  • 上一章讲了如何制作数据集,接下来我们使用mmcls来实现多标签分类。 ... [详细]
author-avatar
关于快乐的秘密_473
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有