我有一个非常大的 excel 文件,我需要删除大约 20,000 行,这取决于满足一个简单的条件,并且在使用过滤器时,excel 不会让我删除如此复杂的范围。条件是:
如果第一列包含值 X,那么我需要能够删除整行。
我正在尝试使用 python 和 xlwt 自动执行此操作,但不太确定从哪里开始。寻求一些代码片段让我开始......感谢那里的任何帮助!
不要删除。只需复制您需要的内容。
我喜欢使用 COM 对象来获得这种乐趣:
import win32com.client
from win32com.client import constants
f = r"h:\Python\Examples\test.xls"
DELETE_THIS = "X"
exc = win32com.client.gencache.EnsureDispatch("Excel.Application")
exc.Visible = 1
exc.Workbooks.Open(Filename=f)
row = 1
while True:
exc.Range("B%d" % row).Select()
data = exc.ActiveCell.FormulaR1C1
exc.Range("A%d" % row).Select()
condition = exc.ActiveCell.FormulaR1C1
if data == '':
break
elif condition == DELETE_THIS:
exc.Rows("%d:%d" % (row, row)).Select()
exc.Selection.Delete(Shift=constants.xlUp)
else:
row += 1
# Before
#
# a
# b
# X c
# d
# e
# X d
# g
#
# After
#
# a
# b
# d
# e
# g
我通常记录 Excel 宏的片段并将它们与 Python 粘合在一起,因为我不喜欢 Visual Basic :-D。
您可以尝试使用 csv 阅读器:
您可以使用,
sh.Range(sh.Cells(1,1),sh.Cells(20000,1)).EntireRow.Delete()
将删除打开的 Excel 电子表格中的第 1 到 20,000 行,因此,
if sh.Cells(1,1).Value == 'X':
sh.Cells(1,1).EntireRow.Delete()
如果您只需要删除数据(而不是“删除”行,即移动行),您可以尝试使用我的模块 PyWorkbooks。您可以在此处获取最新版本:
https://sourceforge.net/projects/pyworkbooks/
有一个 pdf 教程来指导您如何使用它。快乐编码!
我已经使用 Pandas 包实现了这一点....
import pandas as pd
#Read from Excel
xl= pd.ExcelFile("test.xls")
#Parsing Excel Sheet to DataFrame
dfs = xl.parse(xl.sheet_names[0])
#Update DataFrame as per requirement
#(Here Removing the row from DataFrame having blank value in "Name" column)
dfs = dfs[dfs['Name'] != '']
#Updating the excel sheet with the updated DataFrame
dfs.to_excel("test.xls",sheet_name='Sheet1',index=False)