파일의 생성 시간을 확인하려면 Windows 환경에서는 os.path.getctime(file_path) 함수를 사용하면 됩니다. 하지만 UNIX 계열 시스템(Linux, macOS 등)에서는 이 함수가 생성 시간이 아닌, 파일의 속성이나 내용이 마지막으로 변경된 시간을 반환하기 때문에 그대로 사용할 수 없습니다.
UNIX 기반 시스템에서 실제 생성 시간을 얻으려면 os.stat()이 반환하는 stat 객체의 st_birthtime 속성을 사용해야 합니다. 참고로 Linux에서는 커널 수준에서 생성 시간을 제공하지 않는 경우가 많아, 이 경우 파일 내용이 마지막으로 수정된 시간(st_mtime)으로 대체하는 것이 일반적인 방법입니다.
Windows에서 파일 생성 시간 구하기 (예제)
>>> import os
>>> print(os.path.getctime('my_file'))
1505928271.0689342
위 코드는 에포크(epoch, 1970년 1월 1일 00:00:00 UTC) 이후 경과된 시간을 초 단위로 반환합니다. 사람이 읽기 쉬운 형태로 변환하고 싶다면 datetime.fromtimestamp()를 함께 활용할 수 있습니다.
UNIX/Linux/macOS에서 파일 생성 시간 구하기 (예제)
import os
stat = os.stat(path_to_file)
try:
print(stat.st_birthtime)
except AttributeError:
# 아마 Linux 환경일 것입니다.
# Linux에서는 생성 날짜를 쉽게 구할 방법이 없으므로,
# 내용이 마지막으로 수정된 시간으로 대체합니다.
print(stat.st_mtime)
실행 결과
1505928271.0689342
파일 수정 시간(modification time) 구하기
파일의 마지막 수정 시간을 확인하려면 os.path.getmtime(path) 함수를 사용합니다. 이 함수는 Windows, Linux, macOS 등 모든 플랫폼(크로스 플랫폼)에서 지원되므로 별도의 분기 처리 없이 안전하게 사용할 수 있습니다.
예제
>>> import os
>>> print(os.path.getmtime('my_file'))
1505928275.3081832
참고: 타임스탬프를 읽기 쉬운 형식으로 변환하기
반환되는 값은 초 단위의 숫자이므로, 필요에 따라 다음과 같이 변환하여 사용하면 편리합니다.
import os
from datetime import datetime
mtime = os.path.getmtime('my_file')
print(datetime.fromtimestamp(mtime)) # 예: 2017-09-20 22:24:35.308183
정리하면, 생성 시간은 OS별 동작 차이가 있으므로 st_birthtime 사용 여부를 반드시 고려해야 하며, 수정 시간은 os.path.getmtime() 하나로 모든 플랫폼에서 일관되게 처리할 수 있습니다.