过滤Excel表格

时间:2012-06-15 16:46:35

标签: python excel excel-vba vba

我有2个excel文件:IDList.csv和Database.csv。 IDList包含我要从数据库中过滤掉的300个ID号的列表,其中包含2000个条目(在数据库中留下1700个条目)。

我尝试编写for循环(对于IDList中的每个ID,在Database.csv中过滤掉该ID)但是过滤器函数遇到了一些麻烦。我正在使用Pyvot(http://packages.python.org/Pyvot/tutorial.html)。我得到一个语法错误... Python / Pyvot不喜欢我的xl.filter语法,但我无法弄清楚如何纠正语法。这就是文档所说的内容:

xl.tools.filter(func,range) 通过将func应用于给定范围来过滤行或列。为范围中的每个值调用func。如果返回False,则隐藏相应的行/列。否则,行/列将变为可见。

范围必须是行或列向量。如果是行向量,则隐藏列,反之亦然。

请注意,要取消隐藏行/列,范围必须包含隐藏的单元格。例如,取消隐藏范围: xl.filter(lambda v:True,some_vector.including_hidden)

这是我的代码:

import xl 

IDList = xl.Workbook("IDList.xls").get("A1:A200").get() 

for i in range(1,301):
     xl.filter(!=IDList[i-1],"A1:A2000")

如何使用IDList.csv中的条件过滤Database.csv中的列?我对Python或Excel VBA宏的解决方案持开放态度,但我更喜欢Python。

1 个答案:

答案 0 :(得分:4)

import csv

with open("IDList.csv","rb") as inf:
    incsv = csv.reader(inf)
    not_wanted = set(row[0] for row in incsv)

with open("Database.csv","rb") as inf, open("FilteredDatabase.csv","wb") as outf:
    incsv = csv.reader(inf)
    outcsv = csv.writer(outf)
    outcsv.writerows(row for row in incsv if row[0] not in not_wanted)