본문 바로가기

전체 글

엑셀에는 15%로 보이는데, 파이썬으로 읽으면 왜 0.15가 나올까 엑셀 파일을 파이썬으로 불러와 처리하는 스크립트를 짜다 보면, 분명 화면에서는 "15%"라고 보이던 셀이 코드에서는 0.15로 찍히는 순간을 마주치게 됩니다. 처음 보면 데이터가 잘못 읽힌 줄 알고 당황하기 쉽습니다.결론부터 말씀드리면 버그가 아닙니다. 퍼센트나 통화 기호, 날짜처럼 "보기 좋게 꾸며진 값"은 셀 안에 그렇게 저장되어 있지 않습니다. 실제로 어떻게 저장되는지 xlsx 내부를 열어 확인해 봤습니다. 세 가지 서식으로 직접 저장해 봤습니다퍼센트, 통화, 날짜 서식을 각각 지정한 셀을 openpyxl 3.1.5로 만들어 저장한 뒤, 압축을 풀어 xlsx 내부 XML을 직접 읽었습니다. 세 셀 모두 태그 안에는 순수한 숫자만 있습니다."%"도, "원"도, "-"도 파일 어디에도 문자로 적.. 더보기
한컴 없이 hwp 열기, 확장자 바꾸기가 안 통하는 이유와 실제로 되는 방법 hwp 파일을 받았는데 열리지 않을 때 확장자를 doc로 바꿔 보라는 조언을 자주 만납니다.그런데 막상 해 보면 워드가 파일을 집어 드는 것 같다가 깨진 글자만 잔뜩 뱉거나 아예 거부합니다. 왜 될 듯 말 듯 하다가 안 되는지 궁금해서, hwp 파일 하나를 골라 안을 직접 열어 봤습니다.공공데이터포털에서 배포하는 활용가이드 문서였고 크기는 163,840바이트였습니다. 겉봉투는 같은데 속에 든 서류가 다릅니다파일 종류는 확장자가 아니라 파일 맨 앞의 몇 바이트로 판별됩니다. 이 hwp의 앞 8바이트를 찍어 보니 이렇게 나왔습니다.d0 cf 11 e0 a1 b1 1a e1이 서명은 OLE 복합 파일이라는 뜻입니다.예전 워드의 doc, 예전 엑셀의 xls와 글자 하나 다르지 않게 같은 서명입니다. 확장자를.. 더보기
한글 폰트 하나가 13MB, 잘못 받은 게 아니라 글자 수 때문입니다 폰트를 하나 내려받았는데 파일 크기가 13MB로 찍히면 손이 멈칫하게 됩니다.글자 모양 하나 담은 파일이 사진 수십 장 분량이니 뭔가 잘못 받았나 싶어집니다. 윈도우에 이미 깔려 있는 폰트들을 직접 열어 재 봤습니다.결론부터 말씀드리면 고장도, 잘못 받은 것도 아닙니다. 다만 "한글 폰트라서 크다"는 설명도 절반만 맞았습니다.숫자부터 보겠습니다폰트 파일 안에는 글자 하나하나의 모양이 글리프라는 이름으로 들어 있습니다.쉽게 말해 글자별 그림 한 장씩입니다. 이 개수를 같이 놓고 보면 크기 차이가 단번에 설명됩니다. 폰트파일 크기글리프 수한글 음절라틴 문자맑은 고딕13,459,196 B28,21511,172215나눔고딕4,343,844 B20,13811,172191Arial1,045,720 B4,651052.. 더보기
사진 옮겼더니 찍은 날짜가 전부 오늘, 촬영일이 진짜 사라지는 지점은 따로 있습니다 여행 사진 수백 장을 폰에서 컴퓨터로 옮겨 놓고 날짜순으로 정렬했더니,몇 년에 걸쳐 찍은 사진이 전부 같은 날 찍힌 것처럼 줄을 섭니다.파일 목록에 뜬 날짜는 하나같이 오늘입니다. 먼저 안심하셔도 되는 사실부터 말씀드립니다.그 상태에서도 촬영일은 대부분 사진 안에 그대로 살아 있습니다.실제로 처리 방식을 바꿔 가며 재 보니,촬영일이 정말 없어지는 지점은 따로 있었습니다.. 사진 한 장에 날짜가 두 개 들어 있습니다혼란의 출발점은 여기입니다. 우리가 흔히 보는 "수정한 날짜"는 운영체제가 파일에 붙여 두는 속성이고,카메라가 기록한 "찍은 날짜"는 사진 파일 안쪽 EXIF라는 영역에 따로 저장됩니다. 저장되는 자리가 아예 다릅니다.EXIF는 사진을 찍을 때 카메라가 남기는 메모입니다. 이번 실측에 쓴 J.. 더보기
용량 제한에 걸린 큰 파일, 조각으로 나눠 보내고 받은 쪽에서 합치는 법 큰 영상을 보내려다 용량 제한에 막히면 대개 분할 압축을 떠올리게 됩니다.그런데 막상 하려고 보면 궁금한 게 생깁니다. 나눠서 보내면 총 용량도 줄어드는 걸까요.조각을 하나 잃어버리면 나머지라도 건질 수 있을까요. 두 질문 모두 실제로 나누고 합쳐 보면 답이 분명해집니다.60MB 파일을 20MB씩 잘라 보내고 다시 합치는 과정을 처음부터 끝까지 재현해 봤습니다. 나눈다고 총 용량이 줄지는 않습니다먼저 첫 번째 질문부터 정리하겠습니다. 분할은 파일을 작게 만들지 않습니다.하나짜리 덩어리를 여러 개로 썰어 놓을 뿐입니다. 실측에서 조각 4개의 크기를 더하니 압축 파일과 1바이트도 다르지 않았습니다. 압축 쪽은 어떨까요. 영상처럼 이미 압축된 데이터를 대신한 파일은 7z로 묶었더니오히려 3,278바이트 늘.. 더보기
행은 3천 개뿐인데 엑셀 파일이 3.4MB, 용량을 먹는 범인을 파일 안에서 찾아내기 엑셀 파일이 무거워지면 대개 데이터가 많아서라고 생각하게 됩니다. 하지만 실제로는 데이터 양과 파일 용량이 따로 노는 경우가 훨씬 흔합니다.3,000행짜리 주문 내역을 실제로 만들어 저장해 보니 130.1KB였습니다. 그런데 같은 데이터에 무엇을 얹느냐에 따라 이 파일은 1MB가 되기도 하고 3.4MB가 되기도 했습니다. 데이터는 한 줄도 늘지 않았는데 말입니다. 먼저, 엑셀 파일은 사실 압축 폴더입니다xlsx 파일은 하나의 덩어리가 아니라 여러 개의 파일을 ZIP으로 묶어 놓은 꾸러미입니다.시트의 셀 내용, 서식 정의, 삽입된 사진이 각각 다른 파일로 들어 있습니다. 그래서 지금 당장, 프로그램을 하나도 설치하지 않고 내 파일의 범인을 확인할 수 있습니다. 문제의 파일을 복사한 뒤 복사본의 확장자를 .. 더보기
움짤(GIF) 용량이 유독 커요, 프레임과 색상 수로 줄이는 법 사진 몇 장을 이어 붙여 움짤을 만들었는데, 정지 사진 하나보다 용량이 몇 배나 커진 경험 있으신가요. 카카오톡으로 보내려니 전송이 느리고, 커뮤니티에 올리려니 용량 제한에 걸리기도 합니다.결론부터 말씀드리면 GIF 용량은 화질 손실 압축인 JPG와 계산 방식이 다릅니다. 프레임 수와 색상 수, 이 두 가지가 용량을 사실상 결정합니다. 같은 3초짜리 애니메이션을 설정만 바꿔 실제로 저장해 봤습니다.실제로 만들어서 재 봤습니다움직이는 도형이 담긴 300x300 크기의 3초짜리 애니메이션을 파이썬 Pillow로 직접 생성해, 프레임 수와 색상 수만 바꿔가며 GIF로 저장하고 용량을 쟀습니다. 측정 환경은 윈도우 11, 파이썬 3.14.3, Pillow 12.2.0입니다.설정파일 용량10프레임, 256색181.. 더보기
여러 개의 PDF를 하나로 합치고, 필요한 페이지만 빼내는 법 계약서, 영수증, 신분증 사본을 따로따로 스캔해 두었다가 한 파일로 제출해야 할 때가 있습니다. 반대로 여러 장짜리 PDF에서 딱 두 장만 보내야 할 때도 있고요.PDF는 워드처럼 열어서 이어 붙이기가 쉽지 않아 막막하게 느껴집니다. 그래서 합치기와 페이지 빼내기를 실제로 해 보고, 그 과정에서 용량과 페이지 수가 어떻게 변하는지 함께 재 봤습니다. PDF 3개를 실제로 합쳐 봤습니다3페이지짜리 계약서, 2페이지 영수증, 1페이지 신분증 사본을 준비했습니다. 세 파일을 더하면 6페이지, 용량은 약 838KB입니다.이 셋을 하나로 병합한 결과입니다. 측정 환경은 윈도우 11, 파이썬 3.12.10, pypdf 6.14.2입니다.파일페이지용량계약서.pdf3418.5 KB영수증.pdf2279.9 KB신분증... 더보기