1

IDList.csvとDatabase.csvの2つのExcelファイルがあります。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.include_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を好みますが、PythonまたはExcelVBAマクロのソリューションを受け入れています。

4

1 に答える 1

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)
于 2012-06-15T17:35:03.127 に答える