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

1. 背景说明

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

[[email protected] ~]# 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()

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

[[email protected] ~]# /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

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

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

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

时间: 2024-11-16 05:48:54

python实战系列之ip地址排序问题(02)的相关文章

Python 实战系列-微信或网页远程控制电脑

本系列课程为Python实战系列课程:使用微信控制电脑,使用Python的Web框架Flask搭建网页,并使用网页控制电脑:使用wxPython编写图形化的程序,并进一步将这个程序发展为远程控制程序. 课程目录: |--|----|----1 微信远控:Python 控制电脑的两种方法|--|----|----|----1 课程介绍.mp4|--|----|----|----2 命令提示符 CMD 入门.mp4|--|----|----|----3 Python 执行 CMD 命令.mp4|--

Python 获取本机IP地址

import socket #获取本机IP地址 self.local_ip = socket.gethostbyname(socket.gethostname()) print (self.local_ip) python 判断本机是否联网 1 timeout = 200 2 host = 'www.baidu.com' 3 port = 80 4 s=socket.socket() 5 s.settimeout(timeout) 6 status = s.connect_ex((host,po

Python自动化运维——IP地址处理模块

Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:IPy 功能:辅助我们高效的完成IP的规划工作 安装: wget https://pypi.python.org/packages/source/I/IPy/IPy-0.81.tar.gz --no-check-certificate tar -zxvf Ipy-0.81.tar.gz cd IPy-0.81 python setup.py install IP地址.网段的基本处理: 使用方法: #fro

python实战系列之批量主机ping网络测试(07)

1.需求说明   工作环境中,经常会有使用到ping对网络上的主机做网络测试,如机器上架,下线,测试等一些需要,对于大批量的机器来说,逐个主机ping测试,显然难以满足要求,对于机器比较多的场景,可以将需要执行ping测试的IP地址存放至一个文件内,调用脚本执行网络测试,方便,便捷. 2.程序内容 vim ping.py  #!/usr/bin/env python #_*_ coding:utf8 _*_ #author: Happy #来自Happy试验试验 http://happylab.

python实战系列之定期备份配置文件(05)

背景需求 办公区使用了dhcp用于动态分配ip地址,解决了办公用户,移动用户(wifi)地址分配问题,因有配置的变更,为保障配置文件正确,防止出故障时实现快速恢复,特编写了一个备份文件的python脚本.备份的方式是:本地保留一个月的数据,并将备份文件上传至另外一台机器,以达到容灾的目的,程序通过crontab每天定期执行一次即可. 程序内容 cat /usr/local/sbin/backup_dhcp.py   #!/usr/bin/python #_*_ coding:utf8 _*_ #

python 获取本机ip地址的方法(Unix 平台)

1 #!/usr/bin/python 2 import socket 3 import fcntl 4 import struct 5 def get_ip_address(ifname): 6 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 7 return socket.inet_ntoa(fcntl.ioctl( 8 s.fileno(), 9 0x8915, # SIOCGIFADDR 10 struct.pack('256s'

写一个简单的python脚本来返回ip地址的掩码,子网个数等

如果我们想快速得到一个IP地址段有多少个ip,快速得到IP地址段的子网掩码,或者快速得到一个IP地址的二进制,那么可以来学习一下.本文利用python的一个IP分析模块IPy实现,首先安装IPy模块 wget https://pypi.python.org/packages/88/28/79162bfc351a3f1ab44d663ab3f03fb495806fdb592170990a1568ffbf63/IPy-0.83.tar.gz tar -xf IPy-0.83.tar.gz cd IP

[转] python 获取本机ip地址的两种实现方法

#!/usr/bin/python import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:2

RHEL7.0 系列-设置IP地址、网关和DNS

1.1. 设置IP地址.网关和DNS RHEL7里面的网卡命名方式从eth0,1,2的方式变成了enoXXXXX的格式. en 代表的是enthernet (以太网),o 代表的是onboard (内置),那一串数字是主板的某种索引编号自动生成,以便保证其唯一性.和原先的命名方式对比,这种新的方式比较长,难以记忆,不过优点在于编号唯一,做系统迁移的时候不容易出错. 说明:RHEL 7.0默认安装好之后是没有自动开启网络连接的! 方法1.进入网络置配文件目录,修改网卡配置文件,如下图所示: TYP