删除简单的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
工作。 我会用两种方法来决定这个问题:
- 使用COM接口 。
- 使用macros和调用
excel
作为外部过程 。
你也可以考虑使用xlsx
, jython
和Apache 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/