在工作中碰到需要对已经导出的excle文件进行格式转换,总是手动替换觉得重复性太高,所以写了一点代码,现在还有序号那一列没有完成
原图:
需要转成的格式:
import xlrd #引入库
import xlwt
#读文件
#打开文件并返回一个工作蒲对象。open_workbook可以点进去看看函数里面的参数的含义之类的
wb=xlrd.open_workbook(r"C:Users朵朵Desktopchange1.xlsx")
sheet_num=wb.nsheets #获取excel里面的sheet的数量
sheet_names=wb.sheet_names() #获取到Excel里面所有的sheet的名称列表,即使没有sheet也能用。
sheet=wb.sheet_by_index(0) #通过索引的方式获取到某一个sheet,现在是获取的第一个sheet页,也可以通过sheet的名称进行获取,sheet_by_name('sheet名称')
rows=sheet.nrows #获取sheet页的行数,一共有几行
columns=sheet.ncols #获取sheet页的列数,一共有几列
list = [] # 装读取结果的序列
for rownum in range(2, rows): # 遍历每一行的内容
row = sheet.row_values(rownum) # 根据行号获取行
if row: # 如果行存在
app = [] # 一行的内容
for i in range(columns): # 一列列地读取行的内容
app.append(row[i])
list.append(app) # 装载数据
print(list)
#写入一个新的excle文件
# 1.创建 Workbook:wa
wa = xlwt.Workbook()
# # 2.创建 worksheet
ws = wa.add_sheet('漏洞清单')
#将list中的元素提取出来写入ws里
#一次写入一列,把list所有元素中的第2个元素写到ws的第3列(从第9行开始写入)
for j in range (len(list)):
ws.write(j+8,3,list[j][1])
ws.write(j+8,5,list[j][2])
ws.write(j+8,4,list[j][3])
ws.write(j+8,6,list[j][6])
#原文件的第4列需要提取IP后写入汇总后文件的第1列,提取端口号写入第2列,循环提取和写入
for k in range (len(list)):
dizhi=list[k][4].split()#提取IP地址后形成一个列表
# print(dizhi)
duankou=dizhi[2].split(":")#在dizhi列表的基础上提取端口
# print(duankou)
ws.write(k+8,1,dizhi[1])#将IP写入表ws
ws.write(k+8,2,duankou[1])#将端口写入表ws
# 保存文件
wa.save('d:/myExcel.xls')


