通过python修改xml文件

目的:通过python修改xml配置文件,并将python脚本编译成可执行文件

一、通过python修改xml配置文件

如下是待修改的EAICfg.xml

<?xml version='1.0' encoding='utf-8'?>
<root>
    <subRoot>
        <testService>
            <publishProfile profileName="Contoso - FTP" publishMethod="FTP" publishUrl="114.114.114.114" ftpPassiveMode="True" userName="some_ftp_user" userPWD="some_ftp_pwd" destinationAppUrl="http://site.server.contoso.com/" SQLServerDBConnectionString="server=contoso-mssql;uid=db_user;pwd=db_pwd;database=some_db" mySQLDBConnectionString="server=contoso-mysql;uid=db_user;pwd=db_pwd;database=some_db" hostingProviderForumLink="http://support.contoso.com/" controlPanelLink="http://controlpanel.contoso.com/" />
            <comment key="sss" ip="huhu" attr="old" />
        </testService>
    </subRoot>

    <testService2>
        <publishProfile profileName="Contoso - FTP" publishMethod="FTP" publishUrl="0000" ftpPassiveMode="True" userName="some_ftp_user" userPWD="some_ftp_pwd" destinationAppUrl="http://site.server.contoso.com/" SQLServerDBConnectionString="server=contoso-mssql;uid=db_user;pwd=db_pwd;database=some_db" mySQLDBConnectionString="server=contoso-mysql;uid=db_user;pwd=db_pwd;database=some_db" hostingProviderForumLink="http://support.contoso.com/" controlPanelLink="http://controlpanel.contoso.com/" />
        <comment key="sss" ip="000" attr="000" />
        <comment key="sss" ip="000" attr="000" />
        <comment key="aaa" ip="000" attr="newAttr" />
        <comment ip="000" attr="000" />
    </testService2>
</root>

python提供了xml.etree.ElementTree API,用于解析和创建XML数据

如下是用于修改xml文件的相应代码test.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import xml.etree.ElementTree as ET
# 修改本地xml文件
def change_xml(xml_path, change_list):
    '''
    修改本地xml文件
    xml_path:xml路径
    change_list:需要修改内容,
    [{'xml_json_path': 'json_path路径', 'data':{'元素属性名称':'元素属性值'}}]
    例子:
    [{'xml_json_path': './/property[@name = "ReportName"]', 'data':{'value':'666955555'}}]
    '''
    print(xml_path)
    # 打开xml文件
    doc = ET.parse(xml_path)
    root = doc.getroot()
    for change in change_list:
        # 查找修改路径
        for sub1 in root.findall(change['xml_json_path']):
            # 修改标签内容
            for key, value in change['data'].items():
                # 修改内容
                sub1.set(key, value)
    # 保存修改
    doc.write(xml_path)
    doc.write(xml_path, encoding='utf-8', xml_declaration=True)

# change_xml('EAICfg.xml',[{'xml_json_path': 'testService2/comment', 'data':{'ip':'114.114.114.114','attr':'newAttr'}},
# {'xml_json_path': 'subRoot/testService/publishProfile[@publishMethod="FTP"]', 'data':{'publishUrl':'114.114.114.114'}}])

#为避免可执行文件报错找不到路径下的文件,需要用绝对路径
change_xml('/Users/yuhuan/Documents/MyProjects/EAICfg.xml',[{'xml_json_path': 'testService2/comment[@key]', 'data':{'ip':'114.114.114.114','attr':'newAttr'}},
{'xml_json_path': 'subRoot/testService/publishProfile[@publishMethod="FTP"]', 'data':{'publishUrl':'114.114.114.114'}}])


# change_xml('EAICfg.xml',[{'xml_json_path': 'testService2/comment[@key="sss"]', 'data':{'ip':'114.114.114.114','attr':'newAttr'}},
# {'xml_json_path': 'subRoot/testService/publishProfile[@publishMethod="FTP"]', 'data':{'publishUrl':'114.114.114.114'}}])

二、将python脚本编译成可执行文件

首先需要安装pyinstaller库

PyInstaller支持在在Windows/Linux/Mac环境下将Python脚本打包成可执行程序,在没有Python环境的机器上运行。注意:需要在哪个操作系统平台一运行,需在相应的操作系统(或虚拟机)下编译。(即exe文件必须要在windows操作系统下编译)

pip install pyinstaller

进入test.py所在文件夹

pyinstaller -F test.py

常用参数:
-F 生成单个的exe文件。
-w 隐藏运行窗口。
-h 可以查看帮助信息,更多指令可以通过这个查看。

生成的可执行文件在dist目录下。

大功告成!

附录:python库pyinstaller的离线安装

联网情况下,根据pyinstaller安装教程-官方即可完成pyinstaller的安装。

pip install pyinstaller

若要安装pyintaller的主机为公司内网环境,无法连接外网,我最早尝试了官方教程中如下通过下载git源码方式,亲测无法实现离线安装,因为录入pip install .之后会网络请求下载其他依赖

git clone https://github.com/pyinstaller/pyinstaller
cd pyinstaller
pip install .

因为安装pyinstaller之前需要完成其他所有依赖包的安装,只下载pyinstaller代码是不够的。这时找到一位同病相怜的博主的分享救了老命!!参考
由于最新官方已经不推荐 python setup.py install 这种做法了,实际可行的终极解决方案如下

内网环境安装:

  1. 首先需要到外网机上下载好所有需要的离线安装包,命令为: pip download 包名 -d 下载路径。后面的-d 和下载路径可加可不加,不加就是下载到cmd键入命令时的那个目录下。比如:pip download altgraph -d c:/ ,就是把altgraph下载到c盘的根目录下。需要注意的是,命令pip download pyinstaller,会直接把pyinstaller和安装pyinstaller需要的其他依赖包都下载下来。
    注意:需要在内网哪个操作系统实际安装,外网也要以同样的操作系统pip download相应包。(mac和windows执行pip download pyinstaller 下载的依赖和安装包版本是不一样的)

  2. 下载好后把所有的包传到内网机,然后一个一个 pip install 加包名即可,注意安装的顺序,需要先安装依赖包,最后安装下划线的pyinstaller包。

pip install XXXXXXX.whl
通过pip download pyinstaller获取所有依赖包和pyinstaller包

3.验证安装是否成功

pyinstaller --version
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容