python coding bat list 2_python实战系列之ip地址排序问题(二)

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值