python 将目下的excel全部转xml文件到指定的目录
? ? ? ? 我們現(xiàn)在來(lái)實(shí)現(xiàn)將某個(gè)目錄下的所有excel文件轉(zhuǎn)成xml文件到指定的目錄中。新生成的xml文件名稱(chēng)使用excel文件名。 當(dāng)然這個(gè)的前提得會(huì)解析excel文件,上一篇文章說(shuō)了python如何解析excel文件。這里使用python 自帶的xml庫(kù):xml.dom來(lái)生成xml。
? ? ? ??
? ? ? ? 由于腳本比較簡(jiǎn)單,就不細(xì)說(shuō)了,代碼里也有比較詳細(xì)的注釋。先看看excel文件所在的目錄:
只需要將解析的代碼稍作修改添加生成xml的代碼就OK了。看看python腳本:
#! encoding=utf-8import xlrd import xml.dom.minidom import osdef open_excel(file):try:data = xlrd.open_workbook(file)return dataexcept Exception, e:print str(e)def translate_excel_to_xml(excel_absolute_path, name, generate_xml_dir, colnnameindex=0, by_index=0):#解析excel文件data = open_excel(excel_absolute_path)#獲取需要的工作表table = data.sheets()[by_index] #行數(shù)nrows = table.nrows#列數(shù)ncols = table.ncols#創(chuàng)建dom文檔對(duì)象doc = xml.dom.minidom.Document()#創(chuàng)建根元素info = doc.createElement('info')#將根元素添加到文檔中區(qū)doc.appendChild(info)for nrow in range(4, nrows):#創(chuàng)建元素item = doc.createElement('item')for ncol in range(0, ncols):#colnames = table.col_values(ncol)#print colnames # print table.cell(nrow, ncol).valuekey = u"%s" % table.cell(0, ncol).valuevalue = table.cell(nrow, ncol).valueif isinstance(value, float):value = '%0d' % value # print type(key), type(value)#將數(shù)據(jù)都作為xml中元素的屬性,屬性名就是第一行的值,屬性值就是某一行某一列的值item.setAttribute(key.encode('utf-8'), value.encode('utf-8')) # print table.cell(0, ncol).value#將此元素作為根元素的子節(jié)點(diǎn)info.appendChild(item)#要生成的xml文件名generate_xml_name = name.strip().split('.')[0] + '.xml'#要生成的xml文件到某個(gè)目錄的絕對(duì)路徑geneate_xml_dir = os.path.join(generate_xml_dir, generate_xml_name)f = open(geneate_xml_dir, 'w') # doc.writexml(f)f.write(doc.toprettyxml()) #可以使生成xml有好看的格式,要是不需要,可以使用上一行的代碼f.close()def find_assign_xlsx(xlsx_path, generate_xml_dir):for name in os.listdir(xlsx_path):if name.endswith('.xlsx'):#生成excel文件的絕對(duì)路徑excel_absolute_path = os.path.join(xlsx_path, name)#解析excel并轉(zhuǎn)成xmltranslate_excel_to_xml(excel_absolute_path, name, generate_xml_dir)if __name__ == "__main__":excel_src_path = r'D:\mobile_game_dir\newSVN\callOfSteel\trunk\Design\數(shù)據(jù)'generate_xml_dir = r'D:\data'find_assign_xlsx(excel_src_path.decode('utf-8'), generate_xml_dir)代碼其實(shí)是很簡(jiǎn)單的,代碼里有很詳細(xì)的注釋了,這里需要特別注意的是,由于目錄路徑很有中文,python內(nèi)部使用的unicode編碼,這Windows的簡(jiǎn)體中文版本使用的中文編碼不相同,需要將路徑轉(zhuǎn)成unicode編碼,還有一種寫(xiě)法,這樣也行find_assign_xlsx(u'D://mobile_game_dir//newSVN//callOfSteel//trunk//Design//數(shù)據(jù)', generate_xml_dir),這里沒(méi)用使用r,python會(huì)將路徑名轉(zhuǎn)換,我直接寫(xiě)成左雙斜杠來(lái)避免路徑名出錯(cuò),這個(gè)可以自己隨便寫(xiě)。
? ? ? ? 我這里把生成的xml文件放到D盤(pán)下的data目錄中了,看看生成后的data目錄吧:
很方便吧,所有的excel文件都轉(zhuǎn)成xml了。為了驗(yàn)證是否正確,我們隨便打開(kāi)一個(gè)excel文件看看:
再看看D盤(pán)data目錄下的道具.xml文件:
??
? ? ? ? 可以看的出來(lái),沒(méi)什么問(wèn)題。由于python的簡(jiǎn)明和第三方庫(kù)強(qiáng)大,寫(xiě)這種小腳本是非常方便和簡(jiǎn)單的。
總結(jié)
以上是生活随笔為你收集整理的python 将目下的excel全部转xml文件到指定的目录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 你被凤姐套路了么?
- 下一篇: 水晶报表客户机电脑报错“CrystalD