" (quote)를 포함하는 csv 파일 읽기
언어 : Python3
CSV 모듈은 아래에서 참고 하면 됩니다.
https://docs.python.org/ko/3/library/csv.html
기본 예제
기본 예제는 아래와 같습니다.import csv with open('1.csv', encoding='utf-8') as csvfile: reader = csv.reader(csvfile, delimiter=',', quotechar='"') for row in reader: print(row)
이때 delimiter=',' 이 부분은 구분자를 의미합니다. quotechar='"' 이건 둘러쌓이는 문자를 의미합니다. 일반적으로 엑셀에서 csv변환을 할때도 많이 붙어 있습니다.
그래서 아래와 같은 예제 파일을 준비하였습니다. 아래를 읽으면 어떻게 될까요?
"한글","테스트","CSV" "한글",123,4567 ""이건뭔가"",""이런경우","제대로 될까"" "'이건","띠리리'","'띠리리" " " T " "," " " T " " "," " " " T " " " "
결과는 아래와 같습니다.
['한글', '테스트', 'CSV'] ['한글', '123', '4567'] ['이건뭔가""', '이런경우"', '제대로 될까"\n\'이건"', "띠리리'", "'띠리리"] [' T " "', ' " T " " "', ' " " T " " " "']
문제가 되는 경우는 " 가 중복되었는 경우 입니다. 원본 ""이건뭔가"" => 읽은 결과는 이건뭔가"" 이렇게 되어 있습니다. 여기에서 ' 표시는 list안에 들어 있기 때문에 출력되는 것이라 무시 하시면 됩니다.
뭔가 해보기
이걸 처리하려고 CSV 도움말을 살펴보았습니다. doublequote=False 이값을 건들어 보았습니다. 기본값은 True라고 해서 false로 변경해보았습니다.with open('1.csv', encoding='utf-8') as csvfile: reader = csv.reader(csvfile, delimiter=',', quotechar='"',doublequote=False) for row in reader: print(row)
['한글', '테스트', 'CSV'] ['한글', '123', '4567'] ['이건뭔가""', '이런경우"', '제대로 될까"'] ["'이건", "띠리리'", "'띠리리"] [' T " "', ' " T " " "', ' " " T " " " "']
약간 제대로 된것 같기도 한데, 아직 오동작 합니다.
처리 하지 않기
이걸 해결하기 위해서는 " 처리를 전혀 하지 않고 읽어봅니다.quoting = csv.QUOTE_NONE 처리를 하면 됩니다.
with open('1.csv', encoding='utf-8') as csvfile: reader = csv.reader(csvfile, delimiter=',', quotechar='"', quoting = csv.QUOTE_NONE) for row in reader: print(row)
결과를 살펴보면 처리가 하나도 안되어 있음을 알 수 있습니다.
['"한글"', '"테스트"', '"CSV"'] ['"한글"', '123', '4567'] ['""이건뭔가""', '""이런경우"', '"제대로 될까""'] ['"\'이건"', '"띠리리\'"', '"\'띠리리"'] ['" " T " "', '" " " T " " "', '" " " " T " " " "']
최종 처리
" 처리는 어렵지 않습니다, 처음과 끝에 " 가 존재하는 경우 삭제하면 됩니다.with open('1.csv', encoding='utf-8') as csvfile: reader = csv.reader(csvfile, delimiter=',', quotechar='"', quoting = csv.QUOTE_NONE) for row in reader: newlist = [] for value in row: if type(value)==str and value.startswith('"') and value.endswith('"'): newlist.append(value[1:len(value)-1]) else: newlist.append(value) print(newlist)
['한글', '테스트', 'CSV'] ['한글', '123', '4567'] ['"이건뭔가"', '"이런경우', '제대로 될까"'] ["'이건", "띠리리'", "'띠리리"] [' " T " ', ' " " T " " ', ' " " " T " " " ']
완벽하게 처리 되었습니다.
댓글 없음:
댓글 쓰기