csv 개행으로 골아픈 머리 엑셀 업로드로 해결!(feat.openpyxl)

solee·2022년 3월 20일
0

Django

목록 보기
11/12

작고 귀여운 문제가 있었다.
프로젝트에 데이터를 넣으려고 50행 정도 작업했는데, content 자리에 개행된 데이터를 넣으니 에러가 마구마구 나는 거다.

데이터는 이런 식으로 생겼는데, 처음에 한 행만 작업해서 csv로 만든 후 작업했을 때에는 괜찮았던 것이 전체 데이터를 작업하고 나니 에러가 되어 나타났다.

,를 처리하지 않은 거야 내 문제지만 콤마 없는 개행이 다음 데이터로 취급되는 건 생각지도 못한 문제였다. 처음에 2행 작업해서 확인했어야 했는데 내 불찰이다.

그래서 이리저리 찾아 봤는데, CSV 파일을 가지고 개행문자 /n을 매 개행되는 부분마다 만들고 콤마를 없애 가며 작업하는 건 여러 모로 무리가 있어서 그거 말고 다른 방법을 찾으려 애썼다. 그런데 아무리 해도 이게 쉽지가 않았다.

일단 엑셀로 데이터를 삽입하는 방법이 있다기에 킵해 두고 csv 파일로 해결하는 방법을 찾고 또 찾아봤는데, 데이터 자체를 손봐야 한다는 결론에서 벗어날 수가 없었다. 자바 프로젝트를 했던 기억을 헤집어 보아도 <textarea>에 데이터를 넣고 <pre>를 썼다는 생각밖에 안 나는 거다.

결국 포기하고 openpyxl 라이브러리를 찾아보니, 놀랍게도 원래 csv를 DB에 insert할때 사용하던 것과 크게 다르지 않았다. 정확히 말하자면, 같았다!




원래 썼던 csv_uploader

os와 csv를 import하고,
setdefault()를 사용해 프로젝트의 settings를 잡고,
django.setup()을 해주고,
파일을 reader()로 열어서 for문을 돌려 create를 한다.




새로 만든 xlsx_uploader

os와 openpyxl을 import하고,
setdefault()를 사용해 프로젝트의 settings를 잡고,
django.setup()을 해주고,
파일을 load_workbook()로 열어서 for문을 돌려 create를 한다.




우와... 진짜 똑같다.
오히려 이게 더 간단하기까지 하다.
파일을 열어 저장하고, dict처럼 시트의 이름을 가지고 데이터를 꺼내고, 해당 데이터에서 내가 원하는 만큼 슬라이싱해 담아 for문을 돌리는 거다. 놀랍게도 간단해서 조금 허망할 정도였다.

그리고 이렇게 잘 집어넣으면??

개행문자도 예쁘게 잘 들어가 있는 걸 확인할 수 있다!

profile
DA DA DA

0개의 댓글