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  

나는이 세 가지에 대해 하나의 항목을 가지고 싶습니다. 반환 만하면됩니다 :

우리가 파이썬에서이 작업을 수행 할 수있는 방법이 있습니까?

편집 : (29-12-2017 17시 5분) 불분명 한 것에 대해 죄송

.

다음과 같은 기준을 설정할 수 있습니다. 책 이름은 n 단어가있는 경우

  1. , 적어도 처음 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()'을 사용하고, 정규식도 사용할 수 있습니다. 'word1rsplit (None, 1) [0] == word2.rsplit (None, 1) [0]''n-1' 단어로 비교할 수 있습니다. 데이터를 반복하지만 책 이름별로 먼저 정렬 한 다음 이전 책 이름과 현재 책 이름을 비교합니다. –