openpyxl 에서 xlsx파일 저장 시 느린 문제

조회수 212회

초보적인 질문입니다.

데이터를 서버로부터 수시로 받아와서 변경사항이 있으면 해당 행의 해당 셀의 값을 변경하고 저장하는 프로그램을 만들고 있습니다.

openpyxl 모듈을 사용하였구요...

시시각각 변하는 데이터이기때문에 수시로 저장이 이루어집니다만

워크북 변수명을 wb라고 한다면

wb.save('aaa.xlsx') 에서 빠르게는 10초 정도 느리게는 10초 이상도 걸립니다.

수시로 데이터를 받아와야 하는데 저기서 10초 이상 딜레이가 생기니 10초 이상동안의 데이터가 누락되기도 합니다.

저장장치가 SSD라서 그런가요?

아님 .xls로 하면 좀 빨라질까요?

csv로 하려고 했더니 중간중간에 변경되는 값들 처리하는것이 복잡해서 csv는 되도록이면 안쓰려고 합니다.

혹시 저장을 빠르게 할 수 있는 방법이 있을까요?

1 답변

  • 그게 SSD 때문일 리는 거의 없구요... 처리 속도가 느린 이유는 아마도 그 데이터를 XLSX 형식으로 다루고 있어서일 거라고 생각됩니다.

    1. 아시겠지만 CSV와 다르게 XLS(X)는 자료 이상의 메타데이터가 많습니다. 그래서 그걸 일일이 다시 불러와 원하는 작업을 하고 다시 저장하는 데 드는 비용이, csv를 가공하는 것보다 더 큽니다.
    2. aaa.xlsx가 크기가 어느 정도 되는지 모르겠는데 말씀하시는 시나리오대로라면 상당히 클 것으로 예상됩니다. 그렇다면 그 데이터 전체를 메모리에 꽂아놓고 원하는 데이터를 붙인 뒤 그걸 다시 저장하는 것만 해도 상당한 자원 소모가 됩니다. 시간이 걸린다는 의미지요.

    저라면 진지하게 RDBMS를 사용할 생각을 해보겠습니다. 심지어 "중간중간에 변경되는 값들 처리"를 해가면서 수시로 insert를 해야 한다면 오히려 그게 더 "빠른 방법"일 수 있습니다. DB 자료를 나중에 엑셀 파일로 내리는 건 사실 대수가 아니거든요.

    • 답변 감사드립니다. xlsx 파일에 실제 데이터는 그리 많지 않습니다. 많아야 20행, 20열 정도? 밖에 안됩니다만,,, 저도 데이터가 많지 않아서 저장 속도에 대해서는 생각을 안하고 있었는데...세이브만 가면 수초를 잡아먹습니다...xls는 빨라질까 싶어서 .xls로 했는데 openpyxl은 .xls를 지원 안한다네요...DB로 하는 방법밖엔 없나보군요... 감사합니다~~ 김벌레 2019.1.2 09:09
    • .xls 와 .xlsx 는 본질적으로 같아요. 아니면 같은 파일에 대한 수정을 여러 스레드가 요청하다 보니 경쟁 상태에 걸려서 늦어지는 것일 수도 있겠네요. 아무튼 굳이 텍스트형 자료를 저장할 때마다 xls(x)로 번번이 가공하는 건 비경제적입니다 참고하세요~ 엽토군 2019.1.2 10:10

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.