在上一篇 已经将所有订单写入xml文件,这一篇我们把xml文件中的内容读出来,写入excel文件。
输入xml格式:
1 23 4 9姓名1 5123456 6 成都 72 810 15姓名2 11234567 12 成都135 1416 21姓名3 17345678 18 成都191 20
输出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 # 筛选出所有的,这里使用的是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)