我有一个非常大的excel文件,我需要删除大约20,000行,这取决于满足一个简单的条件和excel不会让我删除这样一个复杂的范围使用过滤器。条件是:
如果第一列包含值X,那么我需要能够删除整行。
我正在尝试使用python和xlwt自动执行此操作,但我不确定从哪里开始。寻求一些代码snippits让我开始... 感谢那里的任何帮助!
答案 0 :(得分:9)
不要删除。只需复制你需要的东西。
答案 1 :(得分:2)
您可以尝试使用csv阅读器:
答案 2 :(得分:1)
我喜欢使用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。
答案 3 :(得分:0)
如果你只需要删除数据(而不是“摆脱”行,即它会移动行),你可以尝试使用我的模块PyWorkbooks。您可以在此处获取最新版本:
https://sourceforge.net/projects/pyworkbooks/
有一个pdf教程可以指导您如何使用它。快乐的编码!
答案 4 :(得分:0)
你可以使用,
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()
答案 5 :(得分:-2)
我用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)