Python对excel文件处理
通常会遇到excel中的数据处理,除了用matlab还可以用Python的库
excel处理 使用库openpyxl ,xlrd ,xlwt
xlw写xlsx文件只支持六万多行。openpyxl可以支持一百多万行的。
使用xlrd读取excel文件
直接讲 excel文件读取到一个list中这样就会导致刚开始加载的时候会很慢。
如果文件很大的时候,初始化时间会很长。
打开文件
data = xlrd.open_workbook(‘excel.xls’)
获取工作表
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(0) #通过索引顺序获取
table = data.sheet_by_name(u’Sheet1′)#通过名称获取
获取整行和整列的值 ,获取行数和列数
table.row_values(i)
table.col_values(i)
nrows = table.nrows
ncols = table.ncols
row行 col为列
获取数据
table.col_values(0) # 第一列数据
table.row_values(1) # 第二行的数据 返回值为list
#从单元格获取数据
cell_A1 = table.cell(0,0).value # 单元格A1的数据
cell_C4 = table.cell(2,3).value.ctype # C4 的数据类型
使用xlwt写数据
新建工作薄
book = xlwt.Workbook() # 新建工作簿
sheet = book.add_sheet(‘Test’) # 添加工作页
写入
sheet.write(1,1,’A’) # 第二行第二列写入A
格式
style = xlwt.XFStyle() # 新建样式
font = xlwt.Font() #新建字体
font.name = ‘Times New Roman’
font.bold = True
style.font = font # 将style的字体设置为font
table.write(0,0,’Test’,style)
保存
book.save(filename_or_stream=’excel_test.xls’)
追加写如excel xlwt xlrd一起使用
导入库
import xlwt,xlrd
from xlutils.copy import copy
联系
data = xlrd.open_workbook(‘excel_test.xls’,formatting_info=True)
excel = copy(wb=data) # 完成xlrd对象向xlwt对象转换
其他就可以使用两个库的库函数
使用openpyxl操作
这个库功能比较强大 综合以上两个库的功能。
打开文件
wb = openpyxl.load_workbook(‘excel_test.xlsx’)
根据索引 获取到第一个表
ws = wb.worksheets[0]
获取表的信息
nrows = ws.max_row # 获得行数
ncolumns = ws.max_column # 获得行数
插入行列
ws.insert_rows(1,3) # 从第一行开始插入三行 原本第一行到了第四行
ws.insert_cols(1,3) # 从第一列开始插入三列 原本第一列到了第四列
填充内容
ws.cell(1, 1).value = ’00’ # A1 单元格被填充为00
小项目
excel中记录时间连续的检测值,但是有部分时间没有连续需要补上去。
比如 2017/12/18 13:44:20.000. 下一个应该是加1s,如果没有按照每s进行下去,就需要找出来断点的地方,并补上去。
import xlrd
import xlwt
import time
import datetime
# from xlutils.copy import copy 只能处理6万多条数据
from openpyxl import load_workbook
time1 = time.time()
file = 'newfile.xlsx'
def read_data():
data = xlrd.open_workbook(file)
#excel = copy(data)
table = data.sheets()[0] #通过索引顺序获取
raw_time = table.col_values(0) # 获取列
raw_day = []
last_s =0
last_m = 0
for i,tim in enumerate(raw_time[1:-1]):
full_time = tim.split(' ')
#int_day = int(full_time[0][-2:]) # 获取天
int_s = int(full_time[1][-7:-5]) #获取秒
int_m = int(full_time[1][-10:-8])
#int_h = int(full_time[1][-13:-11])
if (int_s - last_s != 1 ) and (int_s != 0 and last_s != 59): # 比较s的变化
#new_list = []
new_list2 = []
#list_time.append(new_list)
new_list2.append(i)
new_list2.append(raw_time[i])
new_list2.append(tim)
raw_day.append(new_list2)
elif ((int_s == 0 and last_s == 59) and (int_m -last_m !=1 )) or ((int_s != 0 and last_s != 59) and int_m != last_m ): # 找出s变化的特殊情况.
new_list2 = []
new_list2.append(i)
new_list2.append(raw_time[i])
new_list2.append(tim)
raw_day.append(new_list2)
last_s = int_s
last_m = int_m
#print(raw_day)
print('程序运行时间',time.time()-time1)
return raw_day
def write_in(raw_data):
sum_line = 0
wb = load_workbook(file)
# Select First Worksheet
ws = wb.worksheets[0]
for de_data in raw_data[1:]:
#index = de_data[0]+1
#sum_line = de_data[0] +sum_line
print(de_data[1:])
startTime= datetime.datetime.strptime(de_data[1][:-5],"%Y/%m/%d %H:%M:%S") # 初始时间
endTime = datetime.datetime.strptime(de_data[2][:-5],"%Y/%m/%d %H:%M:%S") # 结束时间
chazhi = (endTime-startTime).seconds-1
print(chazhi)
if chazhi >10000 :
print('差值太大')
continue
ws.insert_rows(de_data[0]+2+sum_line,chazhi)
for i in range(chazhi):
i = i+1
str_time = str((startTime + datetime.timedelta(seconds=i))).replace('-', '/')
ws.cell(de_data[0]+1+sum_line+i, 1).value = str(str_time + '.000.')
#print(str_time +'.000.')
sum_line = sum_line + chazhi
wb.save(file)
if __name__ == "__main__" :
raw_data = read_data()
print(raw_data)
write_in(raw_data)
#print((datetime.datetime.now() + datetime.timedelta(minutes=5)).strftime('%Y-%m-%d %H:%M'))