通過(guò)python修改xml文件

目的:通過(guò)python修改xml配置文件,并將python腳本編譯成可執(zhí)行文件

一衅码、通過(guò)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藤违,用于解析和創(chuàng)建XML數(shù)據(jù)

如下是用于修改xml文件的相應(yīng)代碼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:需要修改內(nèi)容浪腐,
    [{'xml_json_path': 'json_path路徑', 'data':{'元素屬性名稱':'元素屬性值'}}]
    例子:
    [{'xml_json_path': './/property[@name = "ReportName"]', 'data':{'value':'666955555'}}]
    '''
    print(xml_path)
    # 打開(kāi)xml文件
    doc = ET.parse(xml_path)
    root = doc.getroot()
    for change in change_list:
        # 查找修改路徑
        for sub1 in root.findall(change['xml_json_path']):
            # 修改標(biāo)簽內(nèi)容
            for key, value in change['data'].items():
                # 修改內(nèi)容
                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'}}])

#為避免可執(zhí)行文件報(bào)錯(cuò)找不到路徑下的文件,需要用絕對(duì)路徑
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腳本編譯成可執(zhí)行文件

首先需要安裝pyinstaller庫(kù)

PyInstaller支持在在Windows/Linux/Mac環(huán)境下將Python腳本打包成可執(zhí)行程序议街,在沒(méi)有Python環(huán)境的機(jī)器上運(yùn)行。注意:需要在哪個(gè)操作系統(tǒng)平臺(tái)一運(yùn)行璧榄,需在相應(yīng)的操作系統(tǒng)(或虛擬機(jī))下編譯特漩。(即exe文件必須要在windows操作系統(tǒng)下編譯)

pip install pyinstaller

進(jìn)入test.py所在文件夾

pyinstaller -F test.py

常用參數(shù):
-F 生成單個(gè)的exe文件。
-w 隱藏運(yùn)行窗口骨杂。
-h 可以查看幫助信息涂身,更多指令可以通過(guò)這個(gè)查看。

生成的可執(zhí)行文件在dist目錄下搓蚪。

大功告成蛤售!

附錄:python庫(kù)pyinstaller的離線安裝

聯(lián)網(wǎng)情況下,根據(jù)pyinstaller安裝教程-官方即可完成pyinstaller的安裝。

pip install pyinstaller

若要安裝pyintaller的主機(jī)為公司內(nèi)網(wǎng)環(huán)境悴能,無(wú)法連接外網(wǎng)揣钦,我最早嘗試了官方教程中如下通過(guò)下載git源碼方式,親測(cè)無(wú)法實(shí)現(xiàn)離線安裝搜骡,因?yàn)殇浫雙ip install .之后會(huì)網(wǎng)絡(luò)請(qǐng)求下載其他依賴

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

因?yàn)榘惭bpyinstaller之前需要完成其他所有依賴包的安裝拂盯,只下載pyinstaller代碼是不夠的佑女。這時(shí)找到一位同病相憐的博主的分享救了老命<敲摇!參考
由于最新官方已經(jīng)不推薦 python setup.py install 這種做法了团驱,實(shí)際可行的終極解決方案如下

內(nèi)網(wǎng)環(huán)境安裝:

  1. 首先需要到外網(wǎng)機(jī)上下載好所有需要的離線安裝包摸吠,命令為: pip download 包名 -d 下載路徑。后面的-d 和下載路徑可加可不加嚎花,不加就是下載到cmd鍵入命令時(shí)的那個(gè)目錄下寸痢。比如:pip download altgraph -d c:/ ,就是把a(bǔ)ltgraph下載到c盤(pán)的根目錄下紊选。需要注意的是啼止,命令pip download pyinstaller,會(huì)直接把pyinstaller和安裝pyinstaller需要的其他依賴包都下載下來(lái)兵罢。
    注意:需要在內(nèi)網(wǎng)哪個(gè)操作系統(tǒng)實(shí)際安裝献烦,外網(wǎng)也要以同樣的操作系統(tǒng)pip download相應(yīng)包。(mac和windows執(zhí)行pip download pyinstaller 下載的依賴和安裝包版本是不一樣的)

  2. 下載好后把所有的包傳到內(nèi)網(wǎng)機(jī)卖词,然后一個(gè)一個(gè) pip install 加包名即可巩那,注意安裝的順序,需要先安裝依賴包此蜈,最后安裝下劃線的pyinstaller包即横。

pip install XXXXXXX.whl
通過(guò)pip download pyinstaller獲取所有依賴包和pyinstaller包

3.驗(yàn)證安裝是否成功

pyinstaller --version
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市裆赵,隨后出現(xiàn)的幾起案子东囚,更是在濱河造成了極大的恐慌,老刑警劉巖战授,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件页藻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡陈醒,警方通過(guò)查閱死者的電腦和手機(jī)惕橙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钉跷,“玉大人弥鹦,你說(shuō)我怎么就攤上這事。” “怎么了彬坏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵朦促,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我栓始,道長(zhǎng)务冕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任幻赚,我火速辦了婚禮禀忆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘落恼。我一直安慰自己箩退,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布佳谦。 她就那樣靜靜地躺著戴涝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钻蔑。 梳的紋絲不亂的頭發(fā)上啥刻,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音咪笑,去河邊找鬼可帽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蒲肋,可吹牛的內(nèi)容都是我干的蘑拯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼兜粘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼申窘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起孔轴,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤剃法,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后路鹰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贷洲,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年晋柱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了优构。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雁竞,死狀恐怖钦椭,靈堂內(nèi)的尸體忽然破棺而出拧额,到底是詐尸還是另有隱情,我是刑警寧澤彪腔,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布侥锦,位于F島的核電站,受9級(jí)特大地震影響德挣,放射性物質(zhì)發(fā)生泄漏恭垦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一格嗅、第九天 我趴在偏房一處隱蔽的房頂上張望番挺。 院中可真熱鬧,春花似錦吗浩、人聲如沸建芙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至右蒲,卻和暖如春阀湿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瑰妄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工陷嘴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人间坐。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓灾挨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親竹宋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子劳澄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容