2つのファイルがあります。 1つは60490のデータ行を含むCSVです。各行は、顧客名、サービス日などの値のセットです。
最初のファイルのこれらの値の1つはVIN値です。
92809 VINのリストを含む2番目の大きなファイルがあります。
2番目のファイルのVINを一覧表示する最初のファイルのすべての行を削除する方法を見つける必要があります。
以下でgrepを試しました。これは私が期待どおりに機能しますが、非常に遅く、約50行の出力後にOSによってシャットダウンされます。
$ grep -v -f vinlist data.csv > output.csv
これを達成するための最速の方法は何ですか?調査中に見つかったすべては、完全にソートされたデータが必要であるか、2つのファイルに同じ行があるか、時間がかかるか、OSによってシャットダウンされるようです。
データ.csv
123,[email protected],JOE,BLOGGS,123456789,12345-123,"Place Name",12345,1C4NJPBB4DD122174,2014-01-20
123,[email protected],JOE,BLOGGS,123456789,12345-123,"Place Name",12345,1GMDV33179D147281,2014-01-20
123,[email protected],JOE,BLOGGS,123456789,12345-123,"Place Name",12345,1FUYDCYB7WP879651,2014-01-20
123,[email protected],JOE,BLOGGS,123456789,12345-123,"Place Name",12345,1FM5K8D8XFGA82149,2014-01-20
123,[email protected],JOE,BLOGGS,123456789,12345-123,"Place Name",12345,5TDBT48A72S003496,2014-01-20
ディスクリスト:
JF1VA1E6XH9812361
1HGCP26369A103521
3N1CN7AP0CL810631
5XYZK3AB7BG089758
1FM5K8D8XFGA82149
4S3BMBG61C3019520
1FTNE24LX4HA22330
1N4AL3AP8FC420210
2GTEC19C491123429
3N1CN7AP5FL944233
ベストアンサー1
行内のvinがどこにあるかを知っているので、一般的な検索を実行する必要はありません。代わりに、高速検索を可能にするためにインデックス付きデータ構造を持つVinを読み取ることができます。
Pythonを使用すると、次のことができます。
パスワード:
# read the vins into a set to allow fast lookup
with open('file3', 'rU') as f:
vins = {vin.strip() for vin in f.readlines()}
# go through the data file one line at a time
with open('file2', 'rU') as f:
for line in f.readlines():
# get the vin in the line
vin = line.split(',')[8]
# if the vin is not in our set, print out the line
if vin not in vins:
print(line.strip())
結果:
123,[email protected],JOE,BLOGGS,123456789,12345-123,"Place Name",12345,1C4NJPBB4DD122174,2014-01-20
123,[email protected],JOE,BLOGGS,123456789,12345-123,"Place Name",12345,1GMDV33179D147281,2014-01-20
123,[email protected],JOE,BLOGGS,123456789,12345-123,"Place Name",12345,1FUYDCYB7WP879651,2014-01-20
123,[email protected],JOE,BLOGGS,123456789,12345-123,"Place Name",12345,5TDBT48A72S003496,2014-01-20