因为做项目的时候经常需要操作Excel中的数据,在网上找代码挺麻烦的,记录一下。
需求是删除表中符合要求的数据,具体来说就是名字里包含特定字符串的都要删掉。比如名字中包括2D_54019的行都删除。
在博客上看到一篇,思路是先把excel读下来,保存为字典。在字典里把不要的都删去,然后再写回原表。写回原表太麻烦了,图省事就重新生成一个excel吧。
首先是把表保存在字典里。
def read_excel(bookname, sheetname):
# 打开Excel文件
wb = xlrd.open_workbook(bookname)
sheet = wb.sheet_by_name(sheetname)
dic = {}
# 把第一列作为字典的键,一行数据保存为列表,作为字典的值。列表中也包含第一列的值哦
for i in range(sheet.nrows-1):
lis = []
for j in range(sheet.ncols):
lis.append(sheet.cell(i+1, j).value)
dic[sheet.cell(i+1, 0).value] = lis
return dic
然后就是在字典里筛选数据。我是把名字里包括特定字符串的数据删掉。
def find_and_delete(dic1, dic2, string):
yaoshanchude = string
buyaode = []
for i in dic1.keys():
my_str = str(i)
r1 = yaoshanchude in my_str
if r1:
buyaode.append(i)
for k in buyaode:
dic2.pop(k)
return dic2
因为字典在遍历的过程中不允许修改,无法执行pop操作,所有用了两个字典,这两个字典是相同的(其实是蠢了,一个字典就行,第一个循环都结束了。。。)
然后就是把字典里的内容写到一张新的Excel表中。
def write_back(dic):
# 这个参数意思,我也不太明白,反正这么写就对了,字面意思理解即可
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet = book.add_sheet('test', cell_overwrite_ok=True)
m = 0
for i in dic.keys():
# 这个地方是从第二行开始写起了。。。
m += 1
n = 0
for j in dic[i]:
sheet.write(m, n, j)
n += 1
book.save('没错,就是我.xls')
呐,就是这么简单(づ ̄ 3 ̄)づ