笔者最近接收到了一批数据,需要将处理并转存为.npy格式以方便在工程上应用。
这些文件乍一看以为是Excel的文件,因此笔者就想使用pandas来完成转换,但是,在使用pandas的read_excel时,却出现了如下的错误。
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'<meta ht'
经过笔者多方搜索,发现这是由于我们的.xls文件并不是标准的Excel文件,标准的Excel文件用文本编辑器打开应该是一堆乱码或一堆16进制数字(因为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")