파이썬에서 파일 정보 얻기

Python // 2024년 05월 30일 작성

파이썬에서 파일의 정보, 예를 들어 파일 사이즈나 수정 일자를 얻는 방법을 알아보자. 여러 방법이 있을 수 있지만 이 글에서는 가장 진보된(?) 형태인 pathlib.Path 클래스를 활용한다.

Path.stat()

stat() 메서드를 활용하면 파일의 메타 정보를 얻을 수 있다.

>>> from pathlib import Path
>>> Path("/Users/seorenn/.zshrc").stat()
os.stat_result(st_mode=33188, st_ino=247065795, st_dev=16777225, st_nlink=1, st_uid=501, st_gid=20, st_size=1699, st_atime=1713253280, st_mtime=1713253242, st_ctime=1713253242)

반환되는 값은 os.stat_result 타입의 값이다. 이 값은 os.stat() 함수의 결과와 완전히 동일하다.

>>> import os
>>> os.stat("/Users/seorenn/.zshrc")
os.stat_result(st_mode=33188, st_ino=247065795, st_dev=16777225, st_nlink=1, st_uid=501, st_gid=20, st_size=1699, st_atime=1713253280, st_mtime=1713253242, st_ctime=1713253242)

둘 중 원하는 것을 사용하면 된다. 단지 Path는 좀 더 풍부한 기능이 있다는 차이가 있을 뿐이다.

예제: 파일 크기 알아내기

os.stat_result 인스턴스에서 파일 크기는 st_size를 통해 알 수 있다.

>>> from pathlib import Path
>>> Path("/Users/seorenn/.zshrc").stat().st_size
1699

이 값은 당연하게도 ls -l 등을 통해 알 수 있는 수치와 동일하다.

$ ls -l ~/
...
-rw-r--r--    1 seorenn  staff    1699 Apr 16 16:40 .zshrc
...

단위는 바이트 단위이므로 1000 혹은 1024 단위로 나누어가면 좀 더 인간 친화적(?) 수치를 얻을 수 있다.

다만 파일이 심볼릭 링크 등 실제 파일이 아닐 경우 링크된 파일의 크기가 아닌 경로 전체의 길이 크기를 돌려줄 수도 있으므로 주의하자.

예제: 파일 수정 시간 알아내기

os.stat_result 인스턴스에서 파일 생성 시간은 st_mtime 값을 통해 알 수 있다. 단지 이 값이 UNIX Timestamp 형식으로 표현되어 있어서 사람이 보기엔 그다지 효율적이지 못하다는 문제가 있다.

따라서 좀 더 읽기 편하게 바꾸면 이런 식이다.

>>> from pathlib import Path
>>> from datetime import datetime
>>> datetime.fromtimestamp(Path("/Users/seorenn/.zshrc").stat().st_mtime)
datetime.datetime(2024, 4, 16, 16, 40, 42, 577873)

흔하게 사용하는 datetime에서 fromtimestamp()가 지원되서 간단히 변환할 수 있따.