**最近在用 python 处理数据,踩了不少坑,在这里总结一下关于 xlrd 和xlwt 在处理程序时遇到的坑。**
1. xlwt 写表格
def write_excel(sheetname,data):
book = xlwt.Workbook(encoding='UTF-8') #创建excel对象
sheet = book.add_sheet("sheet1") #添加一个表 #保存当前列
for d in range(0,len(data)): #取出data中的每一个元组存到表格的每一行
for j in range(0,len(data[d])): #将每一个元组中的每一个单元存到每一列
sheet.write(d, j, data[d][j])
filename = sheetname+('.xls')
book.save(filename) #保存excel
适用于按行保存的list
def write_excel(sheetname,data):
book = xlwt.Workbook(encoding='UTF-8') #创建excel对象
sheet = book.add_sheet("sheet1") #添加一个表 #保存当前列
for d in range(0,len(data)): #取出data中的每一个元组存到表格的每一行
for j in range(0,len(data[d])): #将每一个元组中的每一个单元存到每一列
sheet.write(j, d, data[d][j])
filename = sheetname+('.xls')
book.save(filename) #保存excel
适用于按列保存的list 这里不需要像pandas 那样指定列顺序,直接安装data里的顺序写入 。另外就是不需要确定每列都是一样的长度,会自动调成同样的长度。
- xlrd 读(xlsx,xls)
def read_excel(dir_car,filename):
workbook = xlrd.open_workbook(dir_car +filename)
sheet1_name= workbook.sheet_names()[0]
sheet1 = workbook.sheet_by_name(sheet1_name)
sheet1.col_values(0) # 第1列
sheet1.row_values(0) # 第1行
但是在实际中会出现同样写入的文件,再次读写时编码出差,如果遇到’utf-16-le’ codec can’t decode bytes in position 206-207: unexpected end of data 可以考虑是这行单元格中某个出了非法字符,可以读取内容然后替换掉非法字符,如果没有出现非法字符,可以考虑在末尾加“ ”空格解决问题,遇到编码问题是看清楚错误原因,添加或修改相应的字符一般可以解决。