生成xml配置文件
import re, json, time from xml.etree.ElementTree import Element, SubElement, ElementTree def get_ttinfo(): with open('TransTrans.xml') as f: info = f.read() port = re.findall(r'<UDPPort>(\d+)</UDPPort>', info) room_id = re.findall(r'<ID>(\d+)</ID>', info) return port, room_id def get_json(): with open('ttr.ini', 'r', encoding='utf-8') as f: info = json.load(f) return info def create_ttr(filename='TTReacoed.xml'): port, room_id = get_ttinfo() json_info = get_json() AVMainServer = Element('AVMainServer') Version = SubElement(AVMainServer,'Version') Version.text = '1' RtmpServer = SubElement(AVMainServer, 'RtmpServer') Path = SubElement(RtmpServer, 'Path') Path.text = json_info['RtmpPath'] NotifyPath = SubElement(RtmpServer, 'NotifyPath') NotifyPath.text = json_info['NotifyPath'] SocketInfo = SubElement(AVMainServer,'SocketInfo') for i in range(len(room_id)): DetailInfo = SubElement(SocketInfo, 'DetailInfo') ID =SubElement(DetailInfo, 'ID') ID.text = room_id[i] Name = SubElement(DetailInfo, 'Name') Name.text = room_id[i] SourceIP = SubElement(DetailInfo, 'SourceIP') SourceIP.text = json_info['TT_IP'] SourcePort = SubElement(DetailInfo, 'SourcePort') SourcePort.text = port[i] BindIP = SubElement(DetailInfo, 'BindIP') BindIP.text = '127.0.0.1' BindPort = SubElement(DetailInfo, 'BindPort') BindPort.text = port[i] RecordInfo = SubElement(AVMainServer, 'RecordInfo') RecordIP = SubElement(RecordInfo, 'RecordIP') RecordIP.text = '1.1.1.1' RecordDirectory = SubElement(RecordInfo, 'RecordDirectory') RecordDirectory.text = 'E:/sjlive2017/' DBInfo = SubElement(AVMainServer, 'DBInfo') Platform = SubElement(DBInfo, 'Platform') Platform.text = 'python' Host = SubElement(DBInfo, 'Host') Host.text = '1.1.1.1' User = SubElement(DBInfo, 'User') User.text = 'root' Password = SubElement(DBInfo, 'Password') Password.text = 'python' DBName = SubElement(DBInfo, 'DBName') DBName.text = 'test' indent(AVMainServer) tree = ElementTree(AVMainServer) tree.write(filename, encoding='gb2312') def indent(elem, level=0): i = "\n" + level*"\t" if len(elem): if not elem.text or not elem.text.strip(): elem.text = i + "\t" if not elem.tail or not elem.tail.strip(): elem.tail = i for elem in elem: indent(elem, level+1) if not elem.tail or not elem.tail.strip(): elem.tail = i else: if level and (not elem.tail or not elem.tail.strip()): elem.tail = i try: create_ttr() except Exception as e: with open('ttr.log', 'a', encoding='utf-8') as f: time_now = time.strftime('%Y-%m-%d %H:%M:%S') f.write('{} 配置生成失败 {}\n'.format(time_now, e.args[0])) else: with open('ttr.log', 'a', encoding='utf-8') as f: time_now = time.strftime('%Y-%m-%d %H:%M:%S') f.write('{} 配置生成成功\n'.format(time_now))
#ttr.txt
{"TT_IP":"1.1.1.1","Platform":"python", "RtmpPath":"http://www.baidu.com", "NotifyPath":"http://www.baidu.com"}
示例2:
from xml.etree.ElementTree import Element, SubElement, ElementTree room_num = 1000 #单个程序房间数 config_num = 5 #生成配置文件数量,房间总数=room_num*config_num room_start = 900000 #roomid起始 ts_port_start = 40000 #ts端口起始 tt_port_start = 50000 #tt端口起始 ts_ip = ['1.1.1.1', '2.2.2.2'] #ts服务器ip filename = 'TransTrans.xml' #tt服务端配置文件名必须是TransTrans.xml,生成后的配置文件放到服务器上需要改名 add_info = [room_num*i for i in range(config_num)] def get_tsip(): return ';'.join(ts_ip) def get_tsport(tsport): return ';'.join([tsport]*len(ts_ip)) def create_tt(add = 0): AVMainServer = Element('AVMainServer') Version = SubElement(AVMainServer, 'Version') Version.text = '1' SocketInfo = SubElement(AVMainServer, 'SocketInfo') for i in range(room_num): DetailInfo = SubElement(SocketInfo, 'DetailInfo') ID = SubElement(DetailInfo,'ID') ID.text = str(room_start+i+add) Name = SubElement(DetailInfo,'Name') Name.text = ID.text UDPIP = SubElement(DetailInfo,'UDPIP') UDPIP.text ='127.0.0.1' UDPPort = SubElement(DetailInfo,'UDPPort') UDPPort.text = str(tt_port_start+i+add) PeerServerIP = SubElement(DetailInfo,'PeerServerIP') PeerServerIP.text = get_tsip() PeerServerPort = SubElement(DetailInfo,'PeerServerPort') PeerServerPort.text = get_tsport(str(ts_port_start+i+add)) indent(AVMainServer) tree = ElementTree(AVMainServer) tree.write(str(add)+filename,encoding="GB2312") def indent(elem, level=0): i = "\n" + level*"\t" if len(elem): if not elem.text or not elem.text.strip(): elem.text = i + "\t" if not elem.tail or not elem.tail.strip(): elem.tail = i for elem in elem: indent(elem, level+1) if not elem.tail or not elem.tail.strip(): elem.tail = i else: if level and (not elem.tail or not elem.tail.strip()): elem.tail = i def create_xml(): for i in add_info: create_tt(i) create_xml()
示例3:
from xml.etree.ElementTree import Element, SubElement, ElementTree room_num = 50 #单个配置(程序)房间数量 config_num = 2 #生成配置文件数量,房间总数=room_num*config_num room_start = 900000 #房间起始id ts_port_start = 40000 #ts端口起始id tt_port_start = 50000 #tt端口起始id p2p_port_start = 30000 #p2p端口起始 add_info = [room_num*i for i in range(config_num)] #tt ip信息,ct:电信 cnc:联通 cmcc:移动 hk:香港 没有ip的字段用''代替,则该字段不会生成配置文件 tt_ip = {'ct':['1.1.1.1','ct_ts_config.xml'],'cnc':['2.2.2.2','cnc_ts_config.xml'],'cmcc':['','cmcc_ts_config.xml'],'hk':['3.3.3.3','hk_ts_config.xml']} def create_ts(ttip,filename,add=0): AVMainServer = Element('AVMainServer') Version = SubElement(AVMainServer,'Version') Version.text = '1' SocketInfo = SubElement(AVMainServer,'SocketInfo') for i in range(room_num): DetailInfo = SubElement(SocketInfo,'DetailInfo') ID = SubElement(DetailInfo,'ID') ID.text = str(room_start+i+add) ServerID = SubElement(DetailInfo,'ServerID') ServerID.text = ID.text Name = SubElement(DetailInfo,'Name') Name.text = 'public' Index = SubElement(DetailInfo, 'Index') Index.text = '0' Type = SubElement(DetailInfo,'Type') Type.text = '0' MainServerIP = SubElement(DetailInfo,'MainServerIP') MainServerIP.text = '127.0.0.1' MainServerPort = SubElement(DetailInfo,'MainServerPort') MainServerPort.text = '0' UDPIP = SubElement(DetailInfo,'UDPIP') UDPIP.text = '127.0.0.1' UDPPort = SubElement(DetailInfo,'UDPPort') UDPPort.text = str(ts_port_start+i+add) SuperP2P = SubElement(DetailInfo,'SuperP2P') SuperP2P.text = '0' SuperP2PPort = SubElement(DetailInfo,'SuperP2PPort') SuperP2PPort.text = str(p2p_port_start+i+add) RoomSize = SubElement(DetailInfo,'RoomSize') RoomSize.text = '10' RoomUserSize = SubElement(DetailInfo,'RoomUserSize') RoomUserSize.text = '200' ThreadNumber = SubElement(DetailInfo,'ThreadNumber') ThreadNumber.text = '1' WatchTime = SubElement(DetailInfo,'WatchTime') WatchTime.text = '18000' IsBuffer = SubElement(DetailInfo,'IsBuffer') IsBuffer.text = '1' BufferTime = SubElement(DetailInfo,'BufferTime') BufferTime.text = '1000' UserName = SubElement(DetailInfo,'UserName') UserName.text = 'transserver' Password = SubElement(DetailInfo,'Password') Password.text = '12345' P2P = SubElement(DetailInfo,'P2P') P2P.text = '0' ServerType = SubElement(DetailInfo,'ServerType') ServerType.text = '3' PeerServerIP = SubElement(DetailInfo,'PeerServerIP') PeerServerIP.text = ttip PeerServerPort = SubElement(DetailInfo,'PeerServerPort') PeerServerPort.text = str(tt_port_start+i+add) Broadcast = SubElement(DetailInfo,'Broadcast') Broadcast.text = '1' BroadcastInfo = SubElement(DetailInfo,'BroadcastInfo') PeerInfo = SubElement(BroadcastInfo,'PeerInfo') IP = SubElement(PeerInfo,'IP') IP.text = '127.0.0.1' Port = SubElement(PeerInfo,'Port') Port.text = '12345' PeerInfo2 = SubElement(BroadcastInfo, 'PeerInfo') IP2 = SubElement(PeerInfo2, 'IP') IP2.text = '127.0.0.1' Port2 = SubElement(PeerInfo2, 'Port') Port2.text = '12346' indent(AVMainServer) tree = ElementTree(AVMainServer) tree.write(str(add)+filename,encoding='gb2312') def indent(elem, level=0): i = "\n" + level*"\t" if len(elem): if not elem.text or not elem.text.strip(): elem.text = i + "\t" if not elem.tail or not elem.tail.strip(): elem.tail = i for elem in elem: indent(elem, level+1) if not elem.tail or not elem.tail.strip(): elem.tail = i else: if level and (not elem.tail or not elem.tail.strip()): elem.tail = i def create_xml(): for i in tt_ip.values(): if i[0] != '': for j in add_info: create_ts(i[0], i[1], add=j) create_xml()