dash에서 동적으로 데이터프레임을 csv로 내보내기

plotly에서 만든 파이썬 등을 위한 데이터 시각화 프레임워크인 dash를 이용해서 유튜브 데이터 조회 대시보드를 만들어봤었다.

전체 구상은 월 단위로 끊어지는 기간에 대한 전 채널, 모든 메트릭에 대한 정보를 받아서 파일로 저장한 후, 선택된 채널과 메트릭에 한해서 정보를 테이블로 만드는 것이었다.

그런데, 이 테이블을 csv로 내보내기 위해서 막 고민을 했는데, 콜백과 플라스크에 대한 이해가 없어서인지 제대로 구현하기 쉽지 않았다.

플라스크의 데코레이터인 route를 이용해서 특정 url에 대해서 라우팅을 시키고 이 라우팅되는 함수 내에서 파일을 리턴하여 다운로드되게 해야 했다. 그런데, 문제는 테이블의 정보를 이 함수로 넘겨줄 수가 없다는 것이었다. 내가 아는 바로는 콜백을 해서 숨겨진 html 속성에 접근하도록 해야 함수 간 정보 전달이 가능했다.(물론 다른 방법들도 있긴 하지만 다 이 문제가 있을듯?)

그래서 한참동안 인터넷 검색을 하여 plotly 커뮤니티에서 발견한 방법은, 해당 테이블의 내용을 하나하나 읽어서 url에 때려박고 이 url 내의 문자열을 그대로 다운로드하도록 하는 것이었다. http에 대한 이해가 없어서 자세한 이해는 불가능했지만 뭐 그런 것 같다.

아래는 해당 코드이다.

targetStr = "{}{}".format(
                "data:text/csv;charset=utf-8,%EF%BB%BF", 
                urllib.parse.quote(
                    pd.DataFrame(dataframe).to_csv(), encoding="utf-8"
                )

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다