鱼C论坛

 找回密码
 立即注册
查看: 1467|回复: 9

python对文件内容替换后产生新的不同文件?

[复制链接]
发表于 2020-1-9 09:43:10 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 xlxl 于 2020-1-9 15:08 编辑

奉送10个鱼币,期望高人解答问题,感谢。


问题补充说明:
要把用户input输入的5个IP地址作为value传递给模板配置文件中的12个变量,然后基于变量替换后的模板产生新的5个配置文件;
新的配置文件要求:
1. 文件中的一个local_addr的变量是唯一的,用以标识该配置文件;
2.文件中的其他11个变量复用我输入的另外3个IP地址,用来搭建swarm,mysql,redis的集群;



目前已经完成的部分:
1.基于不同场景下的配置模式,要求用户输入不同组合的IP地址;
2.这些IP地址通过人工取值后,加过处理后赋给对应的列表保存下来;

3. 如何通过循环来实现变量赋值,以及同时产生新的对应文件,也就是代码块中的 ??? 部分的内容;

  1. #!/usr/bin/python
  2. #coding=utf-8

  3. import os,sys

  4. print("""Yunshu install mode description:
  5.         [1]-Single Mode
  6.         [2]-Cluster Mode""")
  7. install_mode = int(raw_input("Please input mode ID 1|2 here:>"))
  8. mode = True
  9. while mode:
  10.     if install_mode != 1 and install_mode != 2:
  11.         install_mode = int(raw_input("Input Error,Please input again:>"))
  12.     else:
  13.         mode = False
  14. if install_mode == 1:
  15.     print("Currently Single install,Please give me the IP:")
  16.     ip_addr = raw_input("waiting input IP...>")
  17.     if not os.path.exists("config_single_demo.txt"):
  18.         print("config_single_demo.txt doesn't exist.")
  19.         exit(-1)
  20.     demo = open("config_single_demo.txt").readlines()
  21.     used = open("config.txt","w")
  22.     for f in demo:
  23.         used.write(f.replace("local_addr",ip_addr).replace("{mysql_ip}",ip_addr).replace("{redis_ip}",ip_addr))
  24.     used.close()
  25.     demo.close()


  26. if install_mode == 2:
  27.     yunshu_server = []
  28.     cluster_server = []
  29.     print("Currently Cluster install,Please give multiple IPs one by one.")
  30.     haproxy = int(raw_input("Does haproxy need or not? [0]-NO,[1]-Yes, Input 0|1 here...>"))
  31.     if haproxy == 0:
  32.         Temp = raw_input("Please input IP of yunshu_server,use ; to seperate them if multple hosts exist:")
  33.         yunshu_server.append(Temp.split(";"))
  34.         Temp = raw_input("Please input IP of cluster server,use ; to seperate these three hosts:")
  35.         cluster_server.append(Temp.split(";"))
  36.         print yunshu_server,cluster_server
  37.     if haproxy == 1:
  38.         proxy_host = []
  39.         proxy_host = raw_input("Please input IP of haproxy server:")
  40.         proxy_port = []
  41.         Temp = raw_input("Please input Port used for Haproxy,use ; to seperate if exist multple ports:")
  42.         proxy_port.append(Temp.split(";"))
  43.         Temp = raw_input("Please input IP of yunshu_server,use ; to seperate them if multple hosts exist:")
  44.         yunshu_server.append(Temp.split(";"))
  45.         Temp = raw_input("Please input IP of cluster server,use ; to seperate these three hosts:")
  46.         cluster_server.append(Temp.split(";"))
  47.         print proxy_host,proxy_port,yunshu_server,cluster_server
  48.     yunshu_server_1 = yunshu_server[0][1]
  49.     yunshu_server_2 = yunshu_server[0][2]
  50.     swarm_manager_1,mysql_master,redis_master_1,redis_slave_3 = cluster_server[0][1]
  51.     swarm_node_1,mysql_slave,redis_master_2,redis_slave_1 = cluster_server[0][2]
  52.     swarm_node_2,redis_master_3,redis_slave_2 = cluster_server[0][3]
  53.     if not os.path.exists("config_cluster_demo.txt"):
  54.         print("config_cluster_demo.txt doesn't exist.")
  55.         exit(-1)
  56.     demo = open("config_cluster_demo.txt").readlines()
  57.     for i in range(0,5):
  58.         used = open("config_???.txt","w")
  59.         for f in demo:
  60.             used.write("????")
  61.         used.close()
  62.     demo.close()
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-9 11:04:29 | 显示全部楼层
额……我眨听不懂呢???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-9 11:44:08 | 显示全部楼层
lixiangyv 发表于 2020-1-9 11:04
额……我眨听不懂呢???

看的懂上面的代码在干啥么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-9 13:15:09 | 显示全部楼层
本帖最后由 hrp 于 2020-1-9 13:18 编辑

看不懂你的描述,你说的变量指的是代码中的变量吗?为什么要保存在文本文件里,说出你最初的目的,抛弃这种奇怪的做法
产生不同的对应文件这个很好做,就是看不懂你想干嘛(这是最大的阻碍)
你用的是python2吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-9 15:04:23 | 显示全部楼层
补充一下问题说明:

我要把input输入的5个IP地址作为value传递给模板配置文件中的12个变量,然后基于变量替换后的模板产生新的配置文件;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-9 16:46:54 | 显示全部楼层
把模板文件的内容按照发代码的形式发出来,然后把要替换的东西明说。
说白了:就是要你给出示例
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-9 16:52:23 | 显示全部楼层
xlxl 发表于 2020-1-9 11:44
看的懂上面的代码在干啥么?

要不是必须,没人想细致的琢磨一个没有注释的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-10 08:51:53 | 显示全部楼层
阴阳神万物主 发表于 2020-1-9 16:46
把模板文件的内容按照发代码的形式发出来,然后把要替换的东西明说。
说白了:就是要你给出示例

只要能给出思路和大概的实现方式就行,不用给具体的实现代码;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-10 11:40:40 | 显示全部楼层
xlxl 发表于 2020-1-10 08:51
只要能给出思路和大概的实现方式就行,不用给具体的实现代码;

主要是不明白你要干什么。

1. 你要把用户输入的内容写出来。
2. 把模板文件写出来。
3. 根据用户输入的内容,如何填写模板的规则写清楚
4. 你期望得到的配置文件的内容和文件名是什么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-10 12:13:40 | 显示全部楼层
XiaoPaiShen 发表于 2020-1-10 11:40
主要是不明白你要干什么。

1. 你要把用户输入的内容写出来。

Yunshu install mode

# Single Mode = 1
# Cluster Mode = 2
install_mode = 1
install_mode = 2

# === For single model ===
ip_addr = '192.168.5.13'

# read template file config_single_demo.txt
# replace local_addr, {mysql_ip}, {redis_ip} with ip_addr
# generate config.txt file with replaced content.

# === For cluster model ===
need_haproxy = Yes
need_haproxy = No

# for without haproxy
yunshu_server = [ip1, ip2]
cluster_server = [ip1, ip2]

# for haproxy
proxy_host = [host1, host2...]
proxy_port = [port1, port2...]
yunshu_server = [ip1, ip2]
cluster_server = [ip1, ip2]

你下面的代码写得好像不对

  1. yunshu_server_1 = yunshu_server[0][1]
  2. yunshu_server_2 = yunshu_server[0][2]

  3. swarm_manager_1,mysql_master,redis_master_1,redis_slave_3 = cluster_server[0][1]
  4. swarm_node_1,mysql_slave,redis_master_2,redis_slave_1 = cluster_server[0][2]
  5. swarm_node_2,redis_master_3,redis_slave_2 = cluster_server[0][3]
复制代码


不知模板文件的内容是什么?
不知使用什么规则去填写你的模板文件?
你期望产生的文件名是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-4 11:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表