본문 바로가기
프로그램

[파이썬] 여러개의 파일에서 중복된 데이터만 새로운 파일에 저장하기

by 오디세이99 2024. 5. 16.
728x90
반응형

문제

a,b 열이 정해진 csv 파일을 여러개를 합친후 a열 기준으로 중복된 값들만 추려서 새로운파일을 만들기

 

 

여러가지 방법으로 해결할 수있습니다.

파일의 크기 등에 따라 방법을 달리해야 합니다.

아래 코드는 먼저 중복된 데이터들을 찾고, 다음에 찾은 중복된 데이터를 저장하도록 되어 있습니다.

path = "E:/RnD/지식IN/tmp/"                               # 파일들이 있는 폴더 path

file_lst = ['data_01.csv','data_02.csv','data_03.csv']    # 파일 목록
new_file = 'data_new.csv'                                 # 중복된 데이터를 저장할 파일명

# step 1) 중복된 데이터 찾기
item_count = {}                                           # 항목들을 count해서 저장할 딕셔너리
for file in file_lst:                                     # 파일들의 이름을 가져 옴
    with open(path + file,'r') as f:                      # 파일을 열고
        line_lst = f.readlines()                          # 데이터를 읽고
        for line in line_lst:                             # 라인별로 데이터를 가져오고
            item, value = line.split(',')                 # 리인의 데이터를 , 로 분리해서 item, value 란는 2개로 가져옴
            if item in item_count.keys():                 # item 이 딕셔너리에 있으면
                item_count[item] += 1                     # +1 을 해서 
            else:                                         # item 이 딕셔너리에 없으면
                item_count[item] = 1                      # 1 로 해서 새로 추가

# step 2) 중복된 데이터만 새로운 파일에 저장
for file in file_lst:                                     # 파일들의 이름을 가져 옴
    with open(path + new_file,'a') as f_new:              # 새로운 파일을 쓰기 모드로 열기
        with open(path + file,'r') as f:                  # 파일을 열고
            line_lst = f.readlines()                      # 데이터를 읽고
            for line in line_lst:                         # 라인별로 데이터를 가져오고
                item, value = line.rstrip().split(',')    # 리인의 데이터를 , 로 분리해서 item, value 란는 2개로 가져옴
                if item_count[item] > 1:                  # item이 중복된 데이터를 찾아 count 한 딕셔너리에 값이 1 보다 크면 (=중복)
                    f_new.write(file + ',' + item + ',' + value + '\n')   # 새 파일에 저장

 

data_01.csv
0.00MB
data_02.csv
0.00MB
data_03.csv
0.00MB

 

 

data_01.csv data_02.csv data_03.csv
a,100
b,110
c,120
d,130
a2,200
b,200
c2,220
d,230
a3,300
b,300
c3,320
d,330

 

와 같이 파일들은 b, d 가 중복되어 있습니다.

다음과 같이 중복되는 데이터만 새로운 파일에 저장 합니다.

data_new.csv
data_01.csv,b,110
data_01.csv,d,130
data_02.csv,b,200
data_02.csv,d,230
data_03.csv,b,300
data_03.csv,d,330
728x90
반응형

댓글