python处理Excel

1、使用python处理excel表格时,其中一个比较难缠的问题:unicode编码

因为python的默认字符编码都为unicode,所以打印从excel中读出的中文或读取中文名的excel表或sheet时,程序提示错误UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)。这是由于在windows中,中文使用了gb2312编码方式,python将其当作unicode和ascii来解码都不正确才报出的错误。使用VAR.encode('gb2312')即可解决打印中文的问题。(很奇怪,有的时候虽然能打印出结果,但显示的不是中文,而是一堆编码。)若要从中文文件名的excel表中读取数据或者读取中文字符,可在前加‘u’表示将该中文文件名采用unicode编码。举例说明:DTS导出的问题单列表默认使用unicode编码,诉求:判断问题单描述中是否包含“同步”字符,如果按照下面这个方式写:

print df['Brief'].str.contains('同步')

则一直返回false:


当改成:

print df['Brief'].str.contains(u'同步')

则可达成我们的预期:

2、

读取文件,格式问题
读取xml文件时,xml里面包含有中文,所以要使用utf-8格式读取,若xml文档中有声明可正常读取:


若xml开头无声明:


执行读取xml语句:DOM = xml.dom.minidom.parse(single_file_path)则报编码错误:
not well-formed (invalid token): line 1, column 1

修改方法:在读取xml前进行编码置换:single_file_path.encode('utf8')


 

3、从DTS下载的问题单列表,默认不是excel格式,是xml格式,若不做格式变换,则在调用:
data = xlrd.open_workbook(single_file_path);
提示格式错误,无法解析,故需要进行xml到excel的转换

data = xlrd.open_workbook(single_file_path);
提示格式错误,无法解析,故需要进行xml到excel的转换
def xmlToExcel(single_file_path):
     w = xlwt.Workbook()
     ws = w.add_sheet("DTSExcel")
     row=0
     style = XFStyle()
     #打开xml文档

     single_file_path.encode('utf8') #修改编码格式为utf-8
     DOM = xml.dom.minidom.parse(single_file_path)

     #得到文档元素对象
     Data = DOM.documentElement
     RowList = Data.getElementsByTagName("Row")
     for rows in RowList:
         if len(RowList)==0:
            continue
         DataList =rows.getElementsByTagName('Data')
         col=0
         for i in range(0,len(DataList)):
             if(len(DataList[i].childNodes)==0):
                 ws.write(row,col,"",style)
             else:
                ws.write(row,col,DataList[i].firstChild.data,style)
             col=col+1
         row =row +1
         
     w.save(single_file_path)
     print("xmlToExcel "+single_file_path )
     return single_file_path

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值