Python 使用xlrd读Excel文件报错

Python 使用xlrd读Excel文件报错:XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '\xef\xbb\xbf<?xml'

 

格式错误,大概意思就是期望的是BOF开头记录,但是读到的是'\xef\xbb\xbf<?xml' 。通常Unsupported format是因为Excel文件里有不能读取的字符引起的。

而我这里读到'\xef\xbb\xbf<?xml'字符,有XML,怀疑文件本身可能就是XML,用简单的读文件方法读文件或简单把后缀改成XML,可以看出,果然是一个XML文件。

 

后来试着把原来的.XLS文件另存为文件为.XLSX后缀的,去掉多余的XML格式结构==,看到新文件明显变小了,xlrd调用ok,没有报错了。

xlsfile=xlrd.open_workbook(filename)
table = xlsfile.sheet_by_index(0)

 

但这样方法只能手动另存为文件,去掉多余格式结构什么的,并不能全自动,想试着用

shutil.copy(INPUTPATH+"\\ZQXX_"+STRDATE+".XLS",INPUTPATH+"\\ZQXX_"+STRDATE+".XLSX")

os.rename(INPUTPATH+"\\ZQXX_"+STRDATE+".XLS",INPUTPATH+"\\ZQXX_"+STRDATE+".XLSX")

都不能实现去掉多余格式,文件大小没有变化,这样操作仅仅是改变了文件名而已。

艹,有想过Excel弄个宏然后python调用宏。大概尝试了下,此路不通。

 

最后,还是直接用python的正则re,自己把文件正则拆分了。

 

贴下测试代码

#coding=utf-8
import os
import re
import datetime,time

tm1 = time.localtime(time.time())
STRDATE = '20161205'#time.strftime("%Y%m%d", tm1) 
INPUTPATH = u"E:\\对接wind资讯\\" + STRDATE


def readxmldata():
    #strstock = os.path.join(INPUTPATH,"GBXX_"+STRDATE+".XML")
    strstock = os.path.join(INPUTPATH,"ZQXX_"+STRDATE+".XML")
    fp = open(strstock, "rb")
    file_data = fp.read()
    data1 = re.findall('<Data ss:Type="String">([\s\W\w\S]*?)</Data></Cell>',file_data)
    print len(data1)
    len_axis = 50
    re_data=[]
    for ii in range(0,int(len(data1)/len_axis)):
        re_data.append(data1[ii*len_axis:(ii+1)*len_axis])
    print int(len(data1)/len_axis)-1
    print re_data[int(len(data1)/len_axis)-1],len(re_data)

if __name__ == '__main__':
    readxmldata()

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值