2017-12-29 7 views
-3

フィールドが部分的に他のフィールドと一致する場合、CSVファイルの行を削除したい。例えばフィールドが部分的に別のフィールドと一致する場合、CSVの行を削除する

serial  book name      author  

1.   Ramakrishna Kathamrita Vol1  Sri M  
2.   Ramakrishna Kathamrita Vol2  Sri M  
3.   Ramakrishna Kathamrita Vol3  Sri M  

私は、これらの3つの1つだけのエントリを持っていると思います。

serial  book name   author 

1.   Ramakrishna Kathamrita Vol1  Sri M 

これをPythonで実行する方法はありますか?

EDIT: (29-12-2017 17:05)は不明であるために申し訳ありません

以下の基準を設定することがあります。

  1. ブック名がn言葉を持っている場合は、少なくとも最初のn-1言葉が一致している必要があります。
  2. 1.が満たされている場合、ユーザーに質問するとその行が削除されます。

はアイデアがひどく、このです:私たちは、それは1)CSV 2)のために達成しない方法を今すぐ

def word_count(string): 
    tokens = string.split() 
    n_tokens = len(tokens) 
    return n_tokens 

my_string1 = "Ramakrishna Kathamrita Vol1" 
my_string2 = "Ramakrishna Kathamrita Vol2"  

splitted1 = my_string1.split() 
splitted2 = my_string2.split() 

if(splitted1[0] = splitted2[0] & splitted1[1] = splitted2[1]) 
    then ask the user whether to delete the row;wait for 'y/n' 

我々はまた、単語数を得ることができますを聞いて行を削除しますか?

+2

これまでに何を試しましたか? – RoadRunner

+1

「部分一致」の基準は何ですか?定義したら、CSVの行をグループ化し、必要に応じて辞書(または 'collections.defaultdict')または' itertools.groupby() 'を使って組み合わせることができます。 – mhawke

+0

編集されました。質問がはっきりしたことを願っています。 –

答えて

0

フィールドが部分的に他のフィールドと一致する場合。

文字列距離アルゴリズムを使用できます。​​の条件を定義する必要がありますが、StringDistモジュールが役立つ可能性があります。

+0

質問を編集しました。私は別のものを探していた。 –

+0

それから、あなたは閉じており、 'split()'を使って単語を数えます。regexも使えます。 'word1rsplit(None、1)[0] == word2.rsplit(None、1)[0] '' n-1'語で比較する。データをループしますが、最初に書籍名でソートし、前の書籍名と現在の書籍名を比較します。 –

関連する問題