读取xml文件,写入excel
在上一篇 Python写xml文件已经将所有订单写入xml文件,这一篇我们把xml文件中的内容读出来,写入excel文件。
输入xml格式:
<?xml version="1.0" encoding="utf-8"?>
<orderlist>
<order>
<customer>姓名1</customer>
<phone>123456</phone>
<address>成都</address>
<count>2</count>
</order>
<order>
<customer>姓名2</customer>
<phone>234567</phone>
<address>成都</address>
<count>5</count>
</order>
<order>
<customer>姓名3</customer>
<phone>345678</phone>
<address>成都</address>
<count>1</count>
</order>
</orderlist>
输出excel格式(这里按点餐次数进行的降序排序):
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAT4AAABfCAIAAAD+hTwsAAAKIklEQVR4nO1du67kNgz1V92v2yJVuv2YYJEmQJo0aRdpFjDuYottUuYPlGIQxys+RMkUadE8UOGRNRoeiseUX5rt2/d/smTJslzZfk4kEgti++XX36aWb9//jleS11olJK8tXZa8kteKJaWbvJLXkiWlm7yS15IlpZu8kteSRVm6f31593LZ29ub2W8Z8HoDiMELZReAl/1gaUr3ry/vv//xp7HLzr4z+y0bXhWjGCH+EF4GpNSk+9Ktl3RfnjJTb4a4FqkwvCCR2bx0pHvoNqWrTgpuL83LcnJkyQtSW0C6Z92mdHVJWZ472fBK6WqVq9KtdJvSVScFt5fmldLVKpekC3XrIt2oV2Ifcq5rUEKO17h0Ud16SdfMX168bKjlZSpFajeVLqXblO4kXjbUcrwW4rX801TneXLgW/yRQvyb4UiZ8Vr7kQwXl7mU5LVWCckrpZu8kteSZfqr9lmyZJlRpmfdEhH7+1dvE6YgeS2ElO4IQoZCSV5LwUG627Zt2yapHGhjg2YoNE29D5czeF5dNm//4ePHj9uPuP4TsBn/RZRXbyfDcTsJKd0RXJcu1UYY4pOgIt1t2z58+FA13rbt8+fPTbUIxcNsyHmldC9JV+j68mNMV5jhFx660nWnc0Ai3ab/qQYUO0mb4c4ZXjD24AZlJ19pgw7pDtxorqRbOf18bOZdcDevwVCgwhoGGQNHRi9cz7rHyBZMk81x5F3H7OVd3SVdiZ1dPpkEkXSHnxGBWffspkO61FAd7T99+oTW2/gIgpKu8CMFX1JF71z31fKYIZ+/yHQi1AbTJ9V5xYuKOj4IDxxn710+UYdp1i2EdIvMBXfw1wsXpSsMHXuOTHaSWFjVb8T5LQWqQ96Y0i9dnhfVz7myaukyXp7SRX3RMNfDRxAqE2ZY6U5NeDmHrz/2vnQrVK8kGKC0XhuvSdk5GXbxYjaaFjoOmcO57rH9OiOCu3BD7yHaF1QmzFGlu7GQ9MP7gXJmStdhwsyPLh8KLo7Tle6deZUe6b5q4IWJAoZb0g/1i6iXtpTubOkWIn8yzkJDgfmWAXQnzPLYnY2L57r8V86TrKol9V2m8wK0pCXd5nhRNhjDQbpFaY7U/NY89GZdFEyg3IfXGFBGKtI975L7nJGu/HLx8dMPvcJciLFZXboVJGpcQrowRs+2NQV2BvqIFUOccUKv06ibQ8wXYQP0K14jVYTSHV4BoHmFGdbjVrKY5BoGitItNDt1s5vgZxPo2AnjfuwpSKbz6jSK99vA/WpJQDabTYXpg5DoUEmilnLQfUIcQsLr3JKvsQGaneBHqJmqH8h3wAmwHu22OsVF+xEeaiXjRbW0H7J86W8EIV8iK8lrKUxfJWN//5olSxb1kll3BPv71+2n7Vy8LdJBYF7eJugjpTuCKsS9zVFDYF7eJujDWrrUqX/DSqeLeBTOIe5tiyYC82q2Oa7AMXtvhZTuCI4Q9zZEGYF5Nducr1FL9npdWP7fJEfp8s46N3O/EF/hFeKOBkxCYF7NNky+PYccqmElM/sgle71RzKg8CTkhVnaWNI78XRO9eu8VUxjpith++u8bnWsvAhmvChUPVQRW1aR7vD/VsFHMs4bvMuOjzCIaw6tBuqoQhz9dUWz0T6p7StgeC0NKF3Yhueb0q2lW9WTVsrOQ4S9Xcd16cJDO2W2pD6ly6NLujB/oAkGzSuWGDnXVZFub+Sh0xiqZY8HRsCcO8kPLlRlr3MU+ULpQntWBD9hPiqrjeoraM1K0r1yrotuw4+1iT2hY+NKSrroAMvTMjMfYyQ0T7ozErsLmKwrka48S1uiT7q97/31nuvWxrFAyFg5EZUu8+t8rPBf4SWkS7l3NrEK5NKVBCH6RXu4LXBTVVLNKL8ID42TAEO8+euVFPljUKEjI6U7gGHpwsr1pDv2R93Uq/bNmuauqRHcxMAVyyZr6qOXdH09rAuJdAvr81WzrtYV5sIe23D7+q+vGrjS4OZQSlcRqHTRM5FmfMLZ0zSrGxhZJUPr5hCsR+yjwbRRdREC4aMLjEld7fl+1FiJHzVZDs1ZEhyFai90hbtP7B6E5N3RG5q+jgv5Jkp5Bi9JjMFYhdsPkm4kPCHEIyEkr1wlI0uWJUtm3RHscVeTiMrL2wR9pHRHsMddTSIqL28T9JGv2o9gj7uaRFRezTZb5yNA7kjpjmCPu5pEVF7NNvylY7jX/c5ZrpIxgj3uahJReTXbMPn2HHKohpXM7EOQVTL4TtQBQ4EyCT3Q8AcgpjHT1SCTH7E/5pGMJqoeqogtq0j3/qtkGIfXjj1NBa1CP0ro8A2afQ5jf9KDkBV4gindWrpVPWnlaH6eBEnWHZMumldRG2bwTekWoE8qwaB5xRJ2r9qXH72DHsA4Q1t59W7SlTRA5UFVDjitF8w5YTDpwokenx6oQ/Ma0u090YXnuug2/FibKJsM31m66MDL0zIzT4OSvgJKukvrtuQqGbpZt7QuwKAN+MbTvFSjS7rCXcJQODdTT8KodFfXbclVMq6f6xYihTJJifLLKtJtWlVJkTk2wfZdPyTBwInAEhiWLqxcTLqKr9qXTtUtLV1JZZMI9dFAujF0W3KVDK2sW3rCbl3pDkvuJtKd0b8XUOmiZxzN+ISzpGlWN2D3SEYZCjs4jYQuk8wzdYHe1+WtonZVPXe1V2fN8HKM0etoziagt6u90A/uDslVMkYQ8k2U8gxekhiDsQq3HyTdSHhCiEdCSF65SkaWLEuWzLoj2OOuJhGVl7cJ+kjpjmCPu5pEVF7eJugjX7UfwR53NYmovJptts5HgNyR0h3BHnc1iai8mm34S8dwr/tts1wlYwR73NUkovJqtmHy7TnkUA0rmdkHuz/phMKTkBdmaWNJ7/RLZLAxvEnIHINgJdNenTUMcd9DpBaY8aJQ9VBFbHmUdAtgy7vs+AiDu+Zg/sje3vPAoNw8NBok23y3cuzY01TXu3UHlC5swzNdW7oX39ctmHSretJK2XmIsLfrkEsXRj9lnqTeUrqK3bqjS7rUvKZKMGhesUTf/+sqSpeJQtxQWQawcSV17oTKiarsdULzGNG2u4XnSBdO9LrSQ1lFuodib75Khpkf0RCnSPF5GM5EKCJo9DDtB/Ac6cJtRrryLG0JO+kWOkyp+IMNmsFq40dJ1hUO7blZ79FNPXpSupIgRL9oD9O/xi5EbqT8he6iviLZpQXmZkMlRfmxhtdq02kqrFO6qFf5I/KtpQvT77B0i3hCwu/qTVC6ULzCnNI1gES6hR2LVbOuonSZYxtuX0p3qNsxPEq61VToHJmMb+GsaprVDXTfHLoyYRaGabWLAtVMzzkk5I9koLsGWKC81Fmj93V9A1QFzZtDcHSqvdAV7j7JVTJGEPJNlPIMXpIYg7EKtx8k3Uh4QohHQkheuUpGlixLlsy6I9gjHsVL8loKKd0RhAyFkryWQkp3BCFDoSSvpfAvtayFWBxAQS8AAAAASUVORK5CYII=" alt="" />
工具库选择:beautifulsoup+lxml用于处理xml文件(当然也可直接使用lxml), xlsxwriter用于写excel文件。
思路也比较简单:找出xml文件中的每一个<order>,然后进行降序排序,再将每一个order信息写入excel文件,每个order一行。
代码如下:
# coding: utf-8 import bs4
import xlsxwriter # 读取xml文件,写入excel
def xmlToExcel(file_xml, file_excel):
# 打开xml文件,并以此创建一个bs对象
xml = open(file_xml, 'r')
doc = bs4.BeautifulSoup(xml, 'xml') # 创建一个excel文件,并添加一个sheet,命名为orders
workbook = xlsxwriter.Workbook(file_excel)
sheet = workbook.add_worksheet('orders') # 设置粗体
bold = workbook.add_format({'bold': True}) # 先在第一行写标题,用粗体
sheet.write('A1', u'姓名', bold)
sheet.write('B1', u'电话', bold)
sheet.write('C1', u'点餐次数', bold)
sheet.write('D1', u'地址', bold) # 筛选出所有的<order>,这里使用的是CSS选择器
order = doc.select('order') # 以每个order的count元素,对order进行降序排序
sort_key = lambda a: int(a.count.text)
order.sort(key=sort_key, reverse=True) # 行号,具体订单信息从第二行开始
row = 2
# 将每一个订单写入excel
for x in order:
# 提取出具体信息
name = x.customer.text
phone = x.phone.text
cnt = x.count.text
addr = x.address.text # 将具体信息写入excel
sheet.write('A%d' % row, name)
sheet.write('B%d' % row, phone)
sheet.write('C%d' % row, cnt)
sheet.write('D%d' % row, addr) row += 1 # 关闭文件
xml.close()
workbook.close() # 测试代码
if __name__ == '__main__':
file1 = 'hh.xml'
file2 = 'hehe.xlsx' xmlToExcel(file1, file2)
读取xml文件,写入excel的更多相关文章
- C#读取xml文件写入到TreeView中
开发过程中我们会遇到一些读取xml文件的时候,下面是我学习的整理. 用XmlDocument读取加载 XmlDocument doc = new XmlDocument(); doc.Load(&qu ...
- 在C#程序中,创建、写入、读取XML文件的方法
一.在C#程序中,创建.写入.读取XML文件的方法 1.创建和读取XML文件的方法,Values为需要写入的值 private void WriteXML(string Values) { //保存的 ...
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- C#中常用的几种读取XML文件的方法
1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/
- 读取xml文件报错:Invalid byte 2 of 2-byte UTF-8 sequence。
程序读取xml文件后,系统报“Invalid byte 2 of 2-byte UTF-8 sequence”错误,如何解决呢? 1.程序解析xml的时候,出现Invalid byte 2 of 2- ...
- C#读取XML文件的基类实现
刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node ...
- C#读取XML文件的方法
先写一个xml文件: <?xml version="1.0" encoding="utf-8" ?> <bookste> <!-- ...
- Spring相关:jdom学习:读取xml文件
云课堂马士兵的spring2.5课程中提到的 用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类 ...
- 在C#中创建和读取XML文件
1.创建简单的XML文件 为了便于测试,我们首先创建控制台应用程序,项目命名为CreateXml,Program.cs代码如下: 这样会在C盘根目录下创建data2.xml文件,文件内容为 using ...
随机推荐
- ansible IP
问题解决了,用IP: "{{ ansible_eth0'ipv4' }}" 而不是{{ansible_all_ipv4_addresses}} 修改了之后的playbook 如下: ...
- C++ 运算符重载二(一元运算符重载)
//一元运算符重载 #include<iostream> using namespace std; class Point { public: Point(int x,int y){ th ...
- XML 是一种元语言, 可以用它来描述其他语言。
A.正确 B.错误 解答:B XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup L ...
- php -- 魔术方法 之 对象克隆 : __clone()
产生对象的方法: 1.从类产生对象.new,通过new去堆区开辟一块内存空间 2.从对象产生对象.clone,通过关键字clone,将一个对象完整的复制一份,新开辟一块内存空间,将复制的结果存放到该内 ...
- 小结:单调栈 & 单调队列
概要: 对于维护信息具有单调性的性质或者问题可以转化为具有单调性质的模型的题,我们可以考虑用单调栈或单调队列. 技巧及注意: 技巧很多,只要能将问题转化为单调性问题,就好解决了. 当维护固定长度的单调 ...
- redhat6.2 clang编译环境搭建(采用源码包编译安装)
1. About clang++ office site:http://clang.llvm.org/ A major focus of our work on clang is to make it ...
- vs2010更新EF模型时报错
尝试从数据库进行更新时,遇到类型为“Microsoft.VSDesigner.Data.Local.ConnectionStringConverterServiceException”的异常.异常消息 ...
- WPF的DataGrid控件从excel里复制数据然后粘贴
WPF的DataGrid控件不能像winform的DataGridView控件一样,支持值的粘贴.WPF的DataGrid控件本质上是跟数据绑定联系在一起,所以需要进行复制粘贴的操作,可以在wpf里用 ...
- Hibernate_day02--课程安排_主键生成策略_对实体类crud操作_实体类对象状态
Hibernate_day02 上节内容 今天内容 实体类编写规则 Hibernate主键生成策略 实体类操作 对实体类crud操作 添加操作 根据id查询 修改操作 删除操作 实体类对象状态(概念) ...
- studio导入Eclipse 项目要改的文件
添加下面文件即可,一个不能少 1. project 2.project.properties 3.classpath 4.AndroidManifest.xml 以上目录都有可以正常导入studio中