乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > 使用<em>python</em> 读取此<em>XML</em>文件,

使用<em>python</em> 读取此<em>XML</em>文件,

作者:乔山办公网日期:

返回目录:excel表格制作


一、读excel表
读excel要用到xlrd模块,官网安装(http://pypi.python.org/pypi/xlrd)。然后就可以跟着里面的例子稍微试一下就知道怎么用了。大概的流程是这样的:
1、导入模块

复制代码代码如下:
import xlrd

2、打开Excel文件读取数据

复制代码代码如下:
data = xlrd.open_workbook('excel.xls')

3、获取一个工作表
① table = data.sheets()[0] #通过索引顺序获取
② table = data.sheet_by_index(0) #通过索引顺序获取
③ table = data.sheet_by_name(u'Sheet1')#通过名称获取
4、获取整行和整列的值(返回数组)

复制代码代码如下:
table.row_values(i)
table.col_values(i)

5、获取行数和列数 

复制代码代码如下:
table.nrows
table.ncols

6、获取单元格

复制代码代码如下:
table.cell(0,0).value
table.cell(2,3).value

就我自己使用的时候觉得还是获取cell最有用,这就相当于是给了你一个二维数组,余下你就可以想怎么干就怎么干了。得益于这个十分好用的库代码很是简洁。但是还是有若干坑的存在导致话了一定时间探索。现在列出来供后人参考吧:

1、首先就是我的统计是根据姓名统计各个表中的信息的,但是调试发现不同的表中各个名字貌似不能够匹配,开始怀疑过编码问题,不过后来发现是因为  空636f70797a64337格。因为在excel中输入的时候很可能会顺手在一些名字后面加上几个空格或是tab键,这样看起来没什么差别,但是程序处理的时候这就是两个完全  不同的串了。我的解决方法是给每个获取的字符串都加上strip()处理一下。效果良好
2、还是字符串的匹配,在判断某个单元格中的字符串(中文)是否等于我所给出的的时候发现无法匹配,并且各种unicode也不太奏效,百度过一些解决  方案,但是都比较复杂或是没用。最后我采用了一个比较变通的方式:直接从excel中获取我想要的值再进行比较,效果是不错就是通用行不太好,个  呢不能问题还没解决。
二、写excel表
写excel表要用到xlwt模块,官网下载(http://pypi.python.org/pypi/xlwt)。大致使用流程如下:
1、导入模块

复制代码代码如下:
import xlwt

2、创建workbook(其实就是excel,后来保存一下就行)

复制代码代码如下:
workbook = xlwt.Workbook(encoding = 'ascii')

3、创建表

复制代码代码如下:
worksheet = workbook.add_sheet('My Worksheet')

4、往单元格内写入内容

复制代码代码如下:
worksheet.write(0, 0, label = 'Row 0, Column 0 Value')

5、保存

复制代码代码如下:
workbook.save('Excel_Workbook.xls')

由于我的需求比较简单,所以这上面没遇到什么问题,唯一的就是建议还是用ascii编码,不然可能会有一些诡异的现象。

当然xlwt功能远远不止这些,他甚至可以设置各种样式之类的。附上一点例子

复制代码代码如下:

Examples Generating Excel Documents Using Python's xlwt

Here are some simple examples using Python's xlwt library to dynamically generate Excel documents.
Please note a useful alternative may be ezodf, which allows you to generate ODS (Open Document Spreadsheet) files for LibreOffi

#vim info.xml

<info>
<intro>信息</intro>
    <list id='001'>
        <head>auto_userone</head>
        <name>Jordy</name>
    </list>
</info>

#vim infoxmlparser.py

#!/usr/bin/python
#coding=utf-8
#Python Version Python 2.6.5
from xml.sax.handler import ContentHandler
from xml.sax import parse
class HeadlineHandler(ContentHandler):
    in_headline=False
    def __init__ (self):
        ContentHandler.__init__(self)
        self.data=[]
        self.file=open('info.txt','w')
        self.file.writelines('id'+'\t'+'head\n')
        self.file.close()
    def startElement(self,name,attrs):
        if name == 'list':
            self.data.append(attrs['id'])
        if name == 'head':
            self.in_headline=True
    def endElement(self,name):
        if name == 'list':
            self.file=open('info.txt','a')
            self.file.writelines(self.data[0]+'\t'+self.data[1]+'\n')
            self.file.close()
            self.data=[]
        if name == 'head':
            self.in_headline=False
    def characters(self,string):
        if self.in_headline:
            self.data.append(string)
if __name__=='__main__':
    parse('info.xml',HeadlineHandler())

执行7a64e4b893e5b19e333&结果

# python infoxmlparser.py
# cat info.txt
id      head
001     auto_userone


 


1、读取CSV文件,可选用CSV模块处理数据,或者使用使用字符串的 split 分解单元;
2、在EXCEL中,可以使用“数据->分列”的功能非常轻松地分解数据。
如果是一次性的数据处理,还是建议在EXCEL中直接“分列”,轻松、简单、快速。

from xml.parsers import expat
import pprint
class Parser:
    def __init__(self):
        self._parser = expat.ParserCreate()
        self._parser.StartElementHandler = self.start
        self._parser.EndElementHandler = self.end
        self._parser.CharacterDataHandler = self.data
        self.Students,self.isInStudentElement=[],False

    def feed(self, data):
        self._parser.Parse(data, 0)

    def close(self):
        self._parser.Parse("", 1) # end of data
        del self._parser # get rid of circular references

    def start(self, tag, attrs):
        if tag=='student':
            self.Students.append([attrs['id']])
            self.isInStudentElement=True

    def end(self, tag):
        if tag=='student':
            self.isInStudentElement=False

    def data(self, data):
        if self.isInStudentElement:
            data=data.strip()
            if data!='':
                self.Students[-1].append(data)

p = Parser()
p.feed('''<?xml version="1.0" encoding="UTF-8"?>
<person>
 <students>
  <student id="20140711">
   <Name>Lily</Name>
   <Sex>Female</Sex>
   <Major>Computer</Major>
  </student>
  <student id="20140801">
   <Name>Gates</Name>
   <Sex>Male</Sex>
   <Major>Biology</Major>
  </student>
 </students>
</person>''')
p.close()
pprint.pprint(p.Students)

中文的元素总出编码问e799bee5baa6e4b893e5b19e332题,so,仅供参考

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网