返回顶部
首页 > 资讯 > 后端开发 > Python >python实战系列之ip地址排序问题(
  • 597
分享到

python实战系列之ip地址排序问题(

实战地址系列之 2023-01-31 03:01:46 597人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

1. 背景说明   从openstack的nova list中获取了虚拟机的ip地址,但这些ip都没有排序和分组,为了进一步增强可读性,对ip地址执行排序操作,在shell下,可以通过sort命令,执行排序操作,具体操作如下:[root@c

1. 背景说明

   从openstack的nova list中获取了虚拟机的ip地址,但这些ip都没有排序和分组,为了进一步增强可读性,对ip地址执行排序操作,在shell下,可以通过sort命令,执行排序操作,具体操作如下:

[root@controller ~]# cat ip.txt | sort -t "." -k1,1n -k2,2n -k3,3n -k4,4n
10.1.104.75
10.1.104.87
10.1.104.149
10.1.104.151
10.1.105.1
10.1.105.7

   上面的方式,可以实现ip地址的排序,如下通过python的方式,实现ip地址的排序,以携带文件的方式执行,先ip地址读入到一个列表中,通过列表的sort()方法,执行对ip地址的排序


2. 脚本内容

#!/usr/bin/env Python
#-*- coding:utf8 -*-
'''
author:Happy
from: Happy云实验室
欢迎交流
'''
import sys
import os.path
def ipsort(filepath="ip.txt"):
        '''
        定义一个函数,用于将ip地址排序, 默认的文件路径是当前目录下的ip.txt文件,返回排序后的ip地址列表
        '''
        try:
                ip = []
                f = file(filepath,'r')
                fcontext = f.readlines()
                for ips in fcontext:
                        ips = ips.strip()
                        ip.append(ips)
                ip.sort(lambda x,y: cmp(''.join( [ i.rjust(3, '0') for i in x.split('.')] ), ''.join( [ i.rjust(3, '0') for i in y.split('.')])))       #排序
                f.close()
        except Exception,msg:
                print "Error:%s" % (msg)
                sys.exit(1)
        return ip
def main():
        '''
        检查脚本携带参数的情况,必须携带一个参数——文件名,并检查文件名是否存在,调用排序的函数ipsort()
        '''
        try:
                if len(sys.argv) != 2:
                        print "Usage: %s %s" % (sys.argv[0],sys.argv[1]) 
                else:
                        if os.path.exists(sys.argv[1]):
                                filename=sys.argv[1]
                        else:
                                print "%s is not exists!" % (sys.argv[1])
                                sys.exit(1)
                ip = ipsort(filename)           #执行排序函数调用
                for ips in ip:
                        print ips
        except Exception,msg:
                print "\033[31mError: %s\033[0m" % (msg)
if __name__ == "__main__":
        main()


说明: 运行方式为,脚本+参数的形式,如下为测试结果:

[root@controller ~]# /usr/local/sbin/ipsort.py /root/ip.txt 
10.1.104.75
10.1.104.87
10.1.104.222
10.1.104.250
10.1.105.1
10.1.105.7


*******************************************

!学习是一个漫长痛苦的过程,需要持之以恒!

*******************************************

--结束END--

本文标题: python实战系列之ip地址排序问题(

本文链接: https://lsjlt.com/news/187439.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作