pandas读取Excel异常处理

笔者最近接收到了一批数据,需要将处理并转存为.npy格式以方便在工程上应用。


数据文件

这些文件乍一看以为是Excel的文件,因此笔者就想使用pandas来完成转换,但是,在使用pandas的read_excel时,却出现了如下的错误。

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'

经过笔者多方搜索,发现这是由于我们的.xls文件并不是标准的Excel文件,标准的Excel文件用文本编辑器打开应该是一堆乱码或一堆16进制数字(因为Excel的存储格式是二进制格式)


Sublime打开标准Excel文件

但是笔者收到的类似Excel的文件其实是一种标签格式


由于这种标签和HTML的很像,因此笔者的思路就是先将其转换为HTML格式,然后在用pandas的read_html读取其中的表格,从而完成数据处理。

import pandas as pd
import numpy as np
from bs4 import BeautifulSoup
import os

first_dir = "F:\新建文件夹" #打开初始文件夹
first_dirlist = os.listdir(first_dir) #遍历文件夹下所有文件夹

for filename in first_dirlist:
    sec_filelist = os.listdir(first_dir + "\\"+filename)
    outdata = pd.DataFrame() #初始化数据
    #建立表头
    outdata = outdata.append([["数据时间","潮位(cm)","雨量(mm)","水温(℃)","盐度","湿度(%)","气压(hPa)","气温(℃)","风速(m/s)","风向(°)","能见度(km)","辐射(μmol/㎡·s)"]])
    print("正在打开"+filename+"文件夹")
    for i in range(31):
        name = str(i)+".xls"
        if name in sec_filelist:
            print("正在处理"+name)
            #读取非标准格式的.xls文件
            realfile = first_dir + "\\"+filename+"\\"+name
            htmlfile = open(realfile, 'r')
            htmlhandle = htmlfile.read()
            #将.xls文件转换为HTML格式
            soup = BeautifulSoup(htmlhandle, 'lxml')
            outhtml = open(str(i)+".html", 'w')
            outhtml.write(str(soup))
            outhtml.close()
            #使用pandas的read_html读取文本中的表格数据
            data = pd.read_html(str(i)+".html")
            outdata = outdata.append(data[0][1::60])
    np.save(filename, outdata) #存储为.npy格式
    print("输出文件"+filename+".npy")

你可能感兴趣的:(pandas读取Excel异常处理)