標籤:
在上一篇 Python寫xml檔案 已經將所有訂單寫入xml檔案,這一篇我們把xml檔案中的內容讀出來,寫入excel檔案。
輸入xml格式:
1 <?xml version="1.0" encoding="utf-8"?> 2 <orderlist> 3 <order> 4 <customer>姓名1</customer> 5 <phone>123456</phone> 6 <address>成都</address> 7 <count>2</count> 8 </order> 9 <order>10 <customer>姓名2</customer>11 <phone>234567</phone>12 <address>成都</address>13 <count>5</count>14 </order>15 <order>16 <customer>姓名3</customer>17 <phone>345678</phone>18 <address>成都</address>19 <count>1</count>20 </order>21 </orderlist>
View Code
輸出excel格式(這裡按點餐次數進行的降序排序):
工具庫選擇:beautifulsoup+lxml用於處理xml檔案(當然也可直接使用lxml), xlsxwriter用於寫excel檔案。
思路也比較簡單:找出xml檔案中的每一個<order>,然後進行降序排序,再將每一個order資訊寫入excel檔案,每個order一行。
代碼如下:
1 # coding: utf-8 2 3 import bs4 4 import xlsxwriter 5 6 # 讀取xml檔案,寫入excel 7 def xmlToExcel(file_xml, file_excel): 8 # 開啟xml檔案,並以此建立一個bs對象 9 xml = open(file_xml, ‘r‘)10 doc = bs4.BeautifulSoup(xml, ‘xml‘)11 12 # 建立一個excel檔案,並添加一個sheet,命名為orders13 workbook = xlsxwriter.Workbook(file_excel)14 sheet = workbook.add_worksheet(‘orders‘)15 16 # 設定粗體17 bold = workbook.add_format({‘bold‘: True})18 19 # 先在第一行寫標題,用粗體20 sheet.write(‘A1‘, u‘姓名‘, bold)21 sheet.write(‘B1‘, u‘電話‘, bold)22 sheet.write(‘C1‘, u‘點餐次數‘, bold)23 sheet.write(‘D1‘, u‘地址‘, bold)24 25 # 篩選出所有的<order>,這裡使用的是CSS選取器26 order = doc.select(‘order‘)27 28 # 以每個order的count元素,對order進行降序排序29 sort_key = lambda a: int(a.count.text)30 order.sort(key=sort_key, reverse=True)31 32 # 行號,具體訂單資訊從第二行開始33 row = 234 # 將每一個訂單寫入excel35 for x in order:36 # 提取出具體資訊37 name = x.customer.text38 phone = x.phone.text39 cnt = x.count.text40 addr = x.address.text41 42 # 將具體資訊寫入excel43 sheet.write(‘A%d‘ % row, name)44 sheet.write(‘B%d‘ % row, phone)45 sheet.write(‘C%d‘ % row, cnt)46 sheet.write(‘D%d‘ % row, addr)47 48 row += 149 50 # 關閉檔案51 xml.close()52 workbook.close()53 54 # 測試代碼55 if __name__ == ‘__main__‘:56 file1 = ‘hh.xml‘57 file2 = ‘hehe.xlsx‘58 59 xmlToExcel(file1, file2)
讀取xml檔案,寫入excel