删除简单的Excel文件中的特征行

我需要删除一些简单而直接的Excel文件中的行。

例如,删除列B不是空白的行。

在这里输入图像说明

我能想到的不是一个真正的“删除”方式,而是重新命名一个新创build的文件:

import os import xlwt from xlrd import open_workbook old_file = open_workbook('C:\\file.xls',formatting_info=True) old_sheet = old_file.sheet_by_index(0) new_file = xlwt.Workbook(encoding='utf-8', style_compression = 0) new_sheet = new_file.add_sheet('Sheet1', cell_overwrite_ok = True) contents = [] for row in range(old_sheet.nrows): a = old_sheet.cell(row,0).value b = old_sheet.cell(row,1).value if len(b) < 1: contents.append(a) for c, content in enumerate(contents): new_sheet.write(c, 0, content) new_file.save('C:\\file_1.xls') os.remove('C:\\file.xls') os.rename('C:\\file_1.xls', 'C:\\file.xls') 

那么,这不是真的删除行,但无论如何这可能是一个合适的方式。

有什么更好的方法来做到这一点,比如考虑更多的条件?

纯Python库没有很好的使用xls工作。 我会用两种方法来决定这个问题:

  1. 使用COM接口 。
  2. 使用macros和调用excel作为外部过程 。

你也可以考虑使用xlsxjythonApache POI

当您使用csv文件而不是xls文件时,处理起来更容易。

尝试pyexcel

 >>> import pyexcel >>> r=pyexcel.FilterableReader("mysample.xls") >>> keep_row_func = lambda row: row[1] == '' >>> r.filter(pyexcel.filters.RowValueFilter(keep_row_func)) >>> pyexcel.utils.to_array(r) [111.0, '', 222.0, '', 444.0, '', 666.0, '', 777.0, ''] >>> w=pyexcel.Writer("output.xlsx") # or output.ods, output.csv >>> w.write_reader(r) >>> w.close() 

使用pyexel ,您可以使用上述脚本覆盖以下任何文件格式:ods,csv,xls,xlsx和xlsm。 文档在这里: http : //pythonhosted.org//pyexcel/