继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

python 实现 2个文件替换更新

LEATH
关注TA
已关注
手记 450
粉丝 93
获赞 467

业务需求: ansible同步中,hosts需要用变化的zk-hosts文件来更新。并且在指定位置去添加和删除,本例中添加和删除为[prod]这个项目。

思路: 将 每个[prod] 方括号开头项目作为一个字典的 key ,其下的 IP 作为一个 value 。 将其制作为一个字典 。 更新时,先去找到 [ ] 项目名称,后去更新其的值, 包括删除,增加,判断是否存在。 

[root@hello test]$ cat hosts

[test]

192.168.3.3

[pre]

192.168.1.137

[prod]

192.168.1.61

192.168.1.62

192.168.1.63

[prod_cli]

192.168.1.158

192.168.1.159

[prod_admin]

192.168.1.8


[root@hello test]$ cat zk-hosts  变化的文件

[all]

-192.168.1.61

-192.168.1.62

10.0.0.1

10.0.0.2


#  源代码

#!/usr/bin/env python

import os,sys,re

#os.system('cat /root/hosts/test/hosts | tr '\n' ' ' | xargs echo  | tr '[' '\n' | tr ']' ' ' &>hosts.txt')

def update_ip(*project):

project=raw_input("pleas input project ")

os.system('/bin/bash a.sh')  #

d={}

ip=[]

f=open('hosts.txt','a+')

a=f.readlines()

f.close()

for line in a:

env=(line.split()[0])

iplist=line.split()[1:]

# if env==project:

d[env]=iplist

#print d

#print project

ciplist=d[project]

#print ciplist

#

zk=[]

z=open('zk-hosts')

for hosts in z.readlines():

hosts=hosts.strip('\n')

zk.append(hosts)

zk.pop(0)

#print zk

#

for i in zk:

# print i

if i in ciplist:

print "%s is exists" % i

elif re.match(r'-(.*)',i):

i=i.lstrip('-')

if i in ciplist:

ciplist.remove(i)


else:

ciplist.append(i)

#print ciplist

#print d.items()

b=open('hosts','a+')

b.truncate()

for key in d:

b.write('['+key+']'+'\n')

for m in d[key]:

print m

b.write(m+'\n')

b.close()

update_ip()


#python脚本中调用的 shell 脚本。

[root@hello test]$ cat a.sh

#!/bin/bash

cat /root/hosts/test/hosts | tr '\n' ' ' | xargs echo  | tr '[' '\n' | tr ']' ' ' &>hosts.txt

sed -i '1d' hosts.txt

#cat /root/hosts/test/zk-hosts | tr '\n' ' ' | xargs echo | tr '[' '\n' | tr ']' ' ' &>zk-hosts.txt

#sed -i '1d' zk-hosts.txt




执行后结果

[root@hello test]$ cat hosts

[test]

192.168.3.3

[pre]

192.168.1.137

[prod]

192.168.1.63

10.0.0.1

10.0.0.2

[prod_admin]

192.168.1.8

[prod_cli]

192.168.1.158

192.168.1.159


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP