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 | 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
반응형
'프로그램' 카테고리의 다른 글
[파이썬] 문제 : 리스트에서 2의 배수 또는 3의 배수 요소값 찾기 (0) | 2024.05.19 |
---|---|
[파이썬] 문제 : 1부터 하나씩 증가하면서 곱하며 1000이 넘을때 수 (0) | 2024.05.19 |
[파이썬] 문제 : 사칙연산 (0) | 2024.05.15 |
[파이썬] 문제 : 소수 판별 (0) | 2024.05.15 |
[파이썬] 문제 : 난수 만들어 DataFrame에 산점도 그리기 (0) | 2024.05.15 |
댓글