我需要在简单直接的Excel文件中删除一些行。
例如,要删除列B不为空的行。
我能想到的并不是'删除'方式,而是重命名新创建的文件:
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')
嗯,它并没有真正删除行,但无论如何它可能是一种合适的方式。
有哪些更好的方法可以做到这一点,例如考虑更多条件?
答案 0 :(得分:2)
使用csv文件而不是xls文件时,它更容易处理。
答案 1 :(得分:2)
尝试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/
答案 2 :(得分:1)
纯Python库对xls
的工作没有很好的解决方法。我会以两种方式决定这个问题:
excel
称为external process。您也可以考虑使用xlsx
,jython
和Apache POI