Python 使用xlrd读Excel文件报错:XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '\xef\xbb\xbf
格式错误,大概意思就是期望的是BOF开头记录,但是读到的是'\xef\xbb\xbf
而我这里读到'\xef\xbb\xbf
后来试着把原来的.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('([\s\W\w\S]*?)',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()