Python删除excel电子表格中的行

时间:2011-04-12 12:19:49

标签: python excel xlwt

我有一个非常大的ex​​cel文件,我需要删除大约20,000行,这取决于满足一个简单的条件和excel不会让我删除这样一个复杂的范围使用过滤器。条件是:

如果第一列包含值X,那么我需要能够删除整行。

我正在尝试使用python和xlwt自动执行此操作,但我不确定从哪里开始。寻求一些代码snippits让我开始... 感谢那里的任何帮助!

6 个答案:

答案 0 :(得分:9)

不要删除。只需复制你需要的东西。

  1. 阅读原始文件
  2. 打开新文件
  3. 迭代原始文件的行(如果行的第一列不包含值X,则将此行添加到新文件中)
  4. 关闭两个文件
  5. 将新文件重命名为原始文件

答案 1 :(得分:2)

您可以尝试使用csv阅读器:

http://docs.python.org/library/csv.html

答案 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)