他のファイルの値を含まない限り、ファイルの行の選択

他のファイルの値を含まない限り、ファイルの行の選択

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

おすすめ記事