2014-07-16 5 views
-2

두 개의 csv 파일을 고려한이 프로그램이 있습니다. "testclaims"(1 열 많은 행)를보고 "masterlist"(한 열, 많은 행)의 단어가 "testclaims"행에 있는지 확인합니다. "testclaims"의 행에 "masterlist"의 단어가 포함되어 있으면 "output"이라는 새로운 .csv 파일에 해당 단어가 나열됩니다. 프로그램의이 부분은 훌륭하게 작동합니다.파이썬에서 두 개의 csv 파일 비교

내가 알아낼 수없는 부분은 "masterlist"의 단어를 포함하지 않는 "testclaims"의 나머지 모든 행을 "output2"라고하는 다른 CSV로 출력하는 것입니다. 두 줄의 코드가 작동하도록해야하지만, 내가 원하는 것을 출력하지는 않습니다. 내가 충분히 명확하게 설명했으면 좋겠다. "testclaims"반복 여러 번에 모든 행이 무엇 출력 2 출력됩니다

import csv 

    with open("testclaims.csv") as file1, open("masterlist.csv") as file2, 
     open("stopwords.csv") as file3,\ 
     open("output.csv", "wb+") as file4, open("output2.csv", "wb+") as file5: 
     writer = csv.writer(file4) 
     writer2 = csv.writer(file5) 
     key_words = [word.strip() for word in file2.readlines()] 
     stop_words = [word.strip() for word in file3.readlines()] 
     internal_stop_words = [' a ', ' an ', ' and ', 'as ', ' at ', ' be ', 'ed ', 
       'ers ', ' for ',\ 
       ' he ', ' if ', ' in ', ' is ', ' it ', ' of ', ' on ', ' to ', 'her ', 'hers '\ 
       ' do ', ' did ', ' a ', ' b ', ' c ', ' d ', ' e ', ' f ', ' g ', ' h ', ' i ',\ 
       ' j ', ' k ', ' l ', ' m ', 'n ', ' n', ' nc ' ' o ', ' p ', ' q ', ' r ', ' s ',\ 
       ' t ', ' u ', ' v ', ' w ', ' x ', ' y ', 'z ', ',', '"', 'ers ', ' th ', ' gc ',\ 
         ' so ', ' ot ', ' ft ', ' ow ', ' ir ', ' ho ', ' er ', ] 
     for row in file1: 
      row = row.strip() 
      row = row.lower() 
      for stop in stop_words: 
       if stop in row: 
        row = row.replace(stop," ") 
      for stopword in internal_stop_words: 
       if stopword in row: 
        row = row.replace(stopword," ") 
      for key in key_words: 
       if key in row: 
        writer.writerow([key, row]) 
       elif key not in row: 
        writer2.writerow([row]) 

: 여기에 내 코드입니다.

"testclaims는"이 하나 개의 열을 포함하는 경우, 예를 들어

:

Happy 
    Sad 
    Angry 
    Dog 
    Cat 

"출력 2"이 하나의 열 출력을 CSV 출력된다

Happy 
    Happy 
    Happy 
    Happy 
    Happy 
    Sad 
    Sad 
    Sad 
    Sad 
    Angry 
    Angry 
    Angry 
    Angry 
    Angry 
    Dog 
    Dog 
    Dog 
    Dog 
    Dog 
    Cat 
    Cat 
    Cat 
    Cat 
    Cat 

과 동일한 출력을 수행하지 각 행의 번호.

+0

어떻게하면 CSV 파일이 어떻게 보이고 원하는 출력을 얻을 수 있습니까? 최소한의 예가 도움이 될 것입니다. – yoopoo

+0

@yoopoo "testclaims"의 각 행을 여러 번 반복해서 인쇄합니다. 예를 들어, "testclaims"에는 1000 행이 있지만, output2 출력에는 33140 행 – Abtra16

+0

이 있습니다. – yoopoo

답변

1

반복 횟수는 두 번이고 행을 인쇄 할 때마다 행 당 최대 한 번만 필요합니다. 마지막 두 줄을 조정해야합니다.

for row in file1: 

    ... 

    for key in key_words: 
     if key in row: 
      writer.writerow([key, row]) 
    if not any(key in row for key in key_words): 
     writer2.writerow([row]) 
+0

"for key in file 1 : 어디에서 파일을 추가합니까?" – Abtra16

+0

나는 행을 의미했다. 마지막 두 줄만 다릅니다. – yoopoo

+0

아! 그것은 효과가있다! 그게 바로 내가 필요로하는 것입니다! 정말 고맙습니다! – Abtra16