python语言语法什么的还是比较简单的,像我这个学c语言的人学了半个月就敢在公司的项目中使用就可以看出python入门还是比较简单的。当然,作为一个菜鸟,使用中肯定是遇到很多问题的,比如令我相当头疼的就是编码问题了。公司的需求是让我解析xml(Excel)来转化为Excel(xml),编码问题肯定是要考虑的问题。我用的是python自带的模块xml.dom.minidom来解析xml的,excel解析和生成用的是xlrd和xlwd,这里不多赘述,现在主要讲我遇到的问题。代码:

def GenerateXml():execlDataList = excel_table_byindex(file="file.xls") #获取表格数据的列表形式impl = xml.dom.minidom.getDOMImplementation()dom = impl.createDocument(None, 'user', None)root = dom.documentElement#employee = dom.createElement('COMP')#root.appendChild(employee)for row in execlDataList:nameE=dom.createElement('userInfo')for key in row:tmpkey = keytmpvalue = row[key]tmpkey = tmpkey.encode("utf-8")tmpvalue = tmpvalue.encode("utf-8")print type(tmpkey)print type(tmpvalue)nameE.setAttribute(tmpkey,tmpvalue) #增加属性root.appendChild(nameE)f= open('config_new.xml', 'a')#buf = StringIO.StringIO()dom.writexml(f, addindent='  ', newl='\n', encoding="utf-8")##writexml(writer, indent, addindent, newl, encoding)#writer是文件对象#indent是每个tag前填充的字符,如:'  ',则表示每个tag前有两个空格#addindent是每个子结点的缩近字符#newl是每个tag后填充的字符,如:'/n',则表示每个tag后面有一个回车#encoding是生成的XML信息头中的encoding属性值,在输出时minidom并不真正进行编码的处理,如果你保存的文本内容中有汉字,则需要自已进行编码转换。f.close()return f

这个函数主要是将解析到的Excel表格信息转化成xml消息。
在我看来,我们只要记住一点就是,python处理字符串的时候,,默认都是用的Unicode就好了。
而xml或者Excel中的字符串都是utf-8或者gbk等等其它。我们当然要转码了!
比如,我要写一个编码格式为utf-8的xml消息,我们就要在最后生成xml文件时将字符编码转为utf-8就好了。就是这么简单。当然我们转的时候应该建一个临时变量来接受key value的值,如果直接key = key.encode(“utf-8”),row[key] = row[key].encode(“utf-8”)这么转的话是要报错的,key转成了utf-8格式,第二句就会报错,因为我们通过utf-8的key是查不到row[key]的。用一个临时变量来接收处理是一个好习惯。

excel如下:

这是生成的xml消息

<?xml version="1.0" encoding="utf-8"?>
<user><userInfo 地址="172.16.1.239" 姓名="田振华" 用户="tianzh" 电话="15011262015" 索引="1" 配置="/etc"/><userInfo 地址="1.1.1.1" 姓名="龚凡" 用户="gongf" 电话="110" 索引="2" 配置="/usr"/><userInfo 地址="2.2.2.2" 姓名="安吉旺" 用户="anjw" 电话="120" 索引="3" 配置="/lib"/>
</user>
<?xml version="1.0" ?>
<user>

以上讲到的是我们直接从Excel文件中解析得到的字符串,我们经过转码写到xml中,这种情况是我们得到的字符串已经是Unicode的类型的字符串了,比如我们Excel中字符串“姓名”我们解析到的为u”\u59d3\u540d”,但是当我们自己自python代码中自己定义的中文字符串呢?如我们在一个utf-8编码的py文件中定义一个变量

key_list = [u"username",u"索引",u"姓名",u"配置",u"地址",u"电话"]

我们用print打印key_list也是这样的吗
结果证明python会帮我们解码为

[u'username', u'\u7d22\u5f15', u'\u59d3\u540d', u'\u914d\u7f6e', u'\u5730\u5740', u'\u7535\u8bdd']

如果这样定义呢
key_list = [“username”,”索引”,”姓名”]
打印出来是这样的
[‘\xe7\x94\xa8\xe6\x88\xb7’, ‘\xe7\xb4\xa2\xe5\xbc\x95’, ‘\xe5\xa7\x93\xe5\x90\x8d’,]
python会按utf-8转码,字符串不是Unicode编码格式,我们用之前还需要进行解码,因此,我们定义中文字符串的最好的方法就是每个字符串前面加u来表示字符串为Unicode编码格式。
因此我们只需要直接用就可以了。以上两种情况是我目前遇到的两种关于解码,编码的两种情况。

python中xml Excel解析编码小结相关推荐

  1. python之XML文件解析

    python对XML的解析 常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同. python有三种方法解析XML,分别是SAX,DOM,以及ElementT ...

  2. 在python中操作excel

    一.可使用的第三方库 python中处理excel表格,常用的库有xlrd(读excel)表.xlwt(写excel)表.openpyxl(可读写excel表)等.xlrd读数据较大的excel表时效 ...

  3. Android中XML数据解析

    转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML ...

  4. python中xpath定位_xpath最新:关于python中的xpath解析定位_爱安网 LoveAn.com

    关于"xpath"的最新内容 聚合阅读 这篇文章主要介绍了关于python中的xpath解析定位,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧... 这篇文章主要 ...

  5. python 写入excel数字格式,怎么在Python中写入Excel的格式

    怎么在Python中写入Excel的格式 发布时间:2021-03-12 17:02:25 来源:亿速云 阅读:77 作者:Leah 这期内容当中小编将会给大家带来有关怎么在Python中写入Exce ...

  6. python中xml格式的转换

    文章目录 python中xml格式的转换 1. 基于DOM. 2. 基于ElementTree 使用dicttoxml xmltodict等模块 1.解析xml文件: 2.字典转换为xml文件: 3. ...

  7. python中读写excel的扩展库_Python读写Excel文件第三方库汇总,你想要的都在这儿!...

    常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. http://xlrd.readthedocs.io/en/latest/ 1.xlrd ...

  8. [转载] Python中对 Excel 的相关详细操作(读取、写入、指定行、指定列、新增sheet工作表)

    参考链接: 使用Python写入Excel工作表 工作中用到这点,就简单的整理了一下 目录 一.准备cateContent.xlsx工作簿 二.Python中关于Excel表格常用操作总结: 2.1  ...

  9. python中的解码与编码

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

最新文章

  1. Mac OS build caffe2 Error:This file was generated by an older version of protoc which is
  2. [SQL Server]Index/deadlock
  3. Java 16 正式发布!你还学得动吗?
  4. 【简报】创建线框结构的PDF格式草图表
  5. MyBatis 源码分析 - 内置数据源
  6. Struts2上传文件的大小设置
  7. 11、java中的I/O流(1)
  8. tkinter 菜单添加事件_Tasker的最新测试劫持了Android 11的电源菜单
  9. 中科院计算机学院王宏,王宏-中国科学院大学-UCAS
  10. 漫话:如何给女朋友解释什么是BIO、NIO和AIO?
  11. VMware虚拟机和Ubuntu系统的必备设置(包括下载地址,更新下载源等)
  12. LINQ to SQL创建三层/多层Web应用系统 (Part 1)
  13. 读大道至简——编程的精义感想
  14. OOD1---wangwenmin
  15. flask综合整理2
  16. java课程设计文档_Java课程设计-文档相似性检查系统(完整)测试版
  17. 百度网盘为何下载总是那么慢?如何才能实现快速下载?
  18. 短视频矩阵系统,抖音矩阵系统,抖音获客系统源码。look
  19. 转:无视苹果 Adobe欲将Flash推广到iPhone
  20. 串ababaaababaa的next和串ababaabab的nextval

热门文章

  1. pytest学习:setup、teardown、setup_class、teardown_class的区别
  2. 零基础小白python入门——深入Python中的文件操作
  3. 年轻人的第一次破产,从二次元开始
  4. 快速学习计算机系统编程
  5. 数字音频处理--延时与混响音效 Matlab
  6. 例如筋斗云的效果,但不通过offset定位的flag标记
  7. Qt 程序使用自带 ttf 字体示例
  8. Date.getyear()、Date.getMonth()、Date.getDay() 已经作废,其他解决办法
  9. 【Unity——阴影实现基本原理】
  10. 嵌入式设备查看系统的版本、编译时间、架构等信息(uname命令)