2012-10-11 2 views
1

으로 수정, 새로운 기록과 삭제를 찾을의 말을하자키 필드를 기준으로 두 개의 CSV 파일을 비교 : 나는 같은 필드, 두 개의 CSV 파일이 파이썬

ID,NAME,SURNAME,HOME_ADDRESS,NUMBER_OF_PHONE_LINES,PREFIX,PHONE_NUMBER,EMAIL 

내가이 개 CSV 파일을 비교하고 싶습니다 및 찾을 : 파일 B와 아니에

  • 기록 (항상 기반 : 파일 A에 있고하지 B에서 (ID, 접두사와 PHONE_NUMBER 비교가 단순히 세 개의 필드 기준)

    • 기록 위의 필드에)
    • 동일한 ID, PREFIX 및 PHONE_NUMBER은 있지만 다른 입력란에는 다른 정보가있는 레코드 (예 : 다른 EMAIL 또는 다른 EMAIL 및 HOME_ADDRESS.

    마지막으로 세 가지 파일로이 정보를 분리하십시오.

    아무도이를 수행하는 방법에 대한 아이디어가 있습니까?

  • +3

    클래스를 만듭니다. 비교 연산자를 만듭니다. 파일을 세트로 읽어 들인 다음 (또는 수동으로 작업하려는 경우 항목을 순서대로 정렬 할 수도 있음) 차와 교차 설정을 사용하십시오. 결과를 3 개의 파일에 씁니다. 그런데 나는 당신을 위해 코드를 작성하지 않을 것입니다. – NotAUser

    +0

    당신의 질문은 "나에게 코드를 줘"라고 말하면, 그렇게 물어볼 생각은 아니 겠지. csv [http://docs.python.org/library/csv.html]를 읽고, 두 파일을 모두 읽은 후에는 단순한 프로그램 일뿐입니다. 파이썬 워드 프로세서를 먼저 시험해보고 문제가있는 경우 시도한 것을 붙여 넣으십시오. –

    답변

    0

    전체적인 아이디어를 제공하려고합니다. 이것은 테스트되지 않았으며 단지 해결책이 아니라 아이디어를 설명하기위한 것입니다!

    # open files... 
    csv_a = f1.readlines() 
    box_a = [x.split(',') for x in csv_a] 
    #similar to load list of lists for box_b 
    box_in_a_not_b = [] 
    box_in_b_not_a = [] 
    box_match_not_perfect = [] 
    while box_a: 
        line = box_a.pop() 
        flag=0 
        while box_b: 
         bline = box_b.pop() 
         if line[0]=bline[0] and line[6]=bline[6] and line[7]=bline[7] # 6 & 7 being PREFIX and PHONE_NUMBER indexes 
          if not all([line[z]==bline[z] for z in range(len(line))]): 
           box_match_not_perfect.append(line) 
           box_match_not_perfect.append(bline) # keeps both instances in the 3d file 
         else: 
          box_in_b_not_a.append(bline) 
          flag =1 # match not found, so add line from A to the file with unique 
    
        #end of while box_b 
        if flag==1: 
         box_in_a_not_b.append(line) 
    
    #end of while box_a 
    in_a_not_b = [','.join(z) for z in box_in_a_not_b] # to get list of csv lines 
    # use another '\n'.join() to get one big multiline string, or write line by lie to the file 
    # to save box_in_a_not_b, box_in_b_not_a and box_in_match_not_perfect in corresponding files 
    #... 
    
    관련 문제