[python] 파이썬에서 파일 생성 및 수정 날짜 / 시간을 얻는 방법?

파일 생성 및 수정 날짜를 기준으로 몇 가지 작업을 수행해야하지만 LinuxWindows 에서 실행 해야하는 스크립트가 있습니다.

파이썬 에서 파일 생성 및 수정을 얻는 가장 좋은 크로스 플랫폼 방법 은 무엇입니까 ?date/times



답변

크로스 플랫폼 방식으로 일종의 수정 날짜를 얻는 것은 쉽습니다. 전화 하면 파일 이 마지막으로 수정 된 시점의 Unix 타임 스탬프가 표시됩니다 .os.path.getmtime(path)path

반면에 파일 생성 날짜를 얻는 것은 세 가지 큰 OS 사이에서도 차이가 있으며 플랫폼에 따라 다릅니다.

이 모든 것을 종합하면 크로스 플랫폼 코드는 다음과 같아야합니다.

import os
import platform

def creation_date(path_to_file):
    """
    Try to get the date that a file was created, falling back to when it was
    last modified if that isn't possible.
    See http://stackoverflow.com/a/39501288/1709587 for explanation.
    """
    if platform.system() == 'Windows':
        return os.path.getctime(path_to_file)
    else:
        stat = os.stat(path_to_file)
        try:
            return stat.st_birthtime
        except AttributeError:
            # We're probably on Linux. No easy way to get creation dates here,
            # so we'll settle for when its content was last modified.
            return stat.st_mtime


답변

몇 가지 선택이 있습니다. 우선, os.path.getmtimeos.path.getctime기능을 사용할 수 있습니다 .

import os.path, time
print("last modified: %s" % time.ctime(os.path.getmtime(file)))
print("created: %s" % time.ctime(os.path.getctime(file)))

다른 옵션은 다음을 사용하는 것입니다 os.stat.

import os, time
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)
print("last modified: %s" % time.ctime(mtime))

참고 : ctime()않습니다 하지 * 괜찬아 시스템에서 생성 시간을 참조 아니라 마지막 시간은 아이 노드의 데이터가 변경되었습니다. (재미있는 블로그 게시물에 대한 링크를 제공하여 의견을 더 명확하게 해준 kojiro에게 감사드립니다)


답변

이를 위해 사용하는 가장 좋은 함수는 os.path.getmtime () 입니다. 내부적으로 이것은 단지을 사용합니다 os.stat(filename).st_mtime.

datetime 모듈은 타임 스탬프를 가장 잘 조작하므로 수정 날짜를 다음 datetime과 같은 객체 로 얻을 수 있습니다 .

import os
import datetime
def modification_date(filename):
    t = os.path.getmtime(filename)
    return datetime.datetime.fromtimestamp(t)

사용 예 :

>>> d = modification_date('/var/log/syslog')
>>> print d
2009-10-06 10:50:01
>>> print repr(d)
datetime.datetime(2009, 10, 6, 10, 50, 1)


답변

os.stat https://docs.python.org/2/library/stat.html#module-stat

편집 : 최신 코드에서는 os.path.getmtime () (Christian Oudard 덕분에 )을 사용해야
하지만 소수점 이하의 시간으로 time_t의 부동 소수점 값을 반환합니다 (OS가 지원하는 경우)


답변

os.path.getmtime () 또는 os.stat () 모드 시간을 가져 오는 두 가지 방법이 있지만 ctime은 플랫폼 간 신뢰할 수 없습니다 (아래 참조).

os.path.getmtime ()

getmtime ( path ) 경로
를 마지막으로 수정 한 시간을 반환합니다. 반환 값은 신기원 이후의 초 수를 나타내는 숫자입니다 (시간 모듈 참조). 파일이 없거나 액세스 할 수없는 경우 os.error를 발생 시키십시오. 버전 1.5.2의 새로운 기능 버전 2.3으로 변경 : os.stat_float_times ()가 True를 반환하면 결과는 부동 소수점 숫자입니다.

os.stat ()

stat ( path )
주어진 경로에서 stat () 시스템 호출을 수행합니다. 리턴 값은 속성이 통계 구조의 멤버에 해당하는 오브젝트입니다. 즉, st_mode (보호 비트), st_ino (inode 번호), st_dev (장치), st_nlink (하드 링크 수), st_uid (소유자의 사용자 ID) ), st_gid (소유자의 그룹 ID), st_size (파일 크기, 바이트), st_atime (가장 최근 액세스 한 시간 ), st_mtime (가장 최근 컨텐츠 수정 시간), st_ctime (플랫폼 종속, 최근 메타 데이터 변경 시간 유닉스에서 또는 Windows에서 생성 시간) :

>>> import os
>>> statinfo = os.stat('somefile.txt')
>>> statinfo
(33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926L
>>> 

위 예제에서 statinfo.st_mtime 또는 statinfo.st_ctime을 사용하여 각각 mtime 및 ctime을 가져옵니다.


답변

Python 3.4 이상에서는 많은 os 모듈에 대한 래퍼를 포함 하는 객체 지향 pathlib 모듈 인터페이스를 사용할 수 있습니다 . 다음은 파일 통계를 얻는 예입니다.

>>> import pathlib
>>> fname = pathlib.Path('test.py')
>>> assert fname.exists(), f'No such file: {fname}'  # check that the file exists
>>> print(fname.stat())
os.stat_result(st_mode=33206, st_ino=5066549581564298, st_dev=573948050, st_nlink=1, st_uid=0, st_gid=0, st_size=413, st_atime=1523480272, st_mtime=1539787740, st_ctime=1523480272)

무엇에 대한 자세한 내용은 os.stat_result포함, 참조 문서 . 원하는 수정 시간 동안 fname.stat().st_mtime:

>>> import datetime
>>> mtime = datetime.datetime.fromtimestamp(fname.stat().st_mtime)
>>> print(mtime)
datetime.datetime(2018, 10, 17, 10, 49, 0, 249980)

Windows에서 생성 시간을 원하거나 Unix에서 가장 최신 메타 데이터를 변경하려면 다음을 사용하십시오 fname.stat().st_ctime.

>>> ctime = datetime.datetime.fromtimestamp(fname.stat().st_ctime)
>>> print(ctime)
datetime.datetime(2018, 4, 11, 16, 57, 52, 151953)

이 기사 에는 pathlib 모듈에 대한 더 유용한 정보와 예제가 있습니다.


답변

os.statst_mtimest_ctime속성을 가진 명명 된 튜플을 반환 합니다. 수정 시간은 st_mtime두 플랫폼 모두에 있습니다. 불행히도 Windows에서는 ctime“생성 시간”을 의미하고 POSIX에서는 “변경 시간”을 의미합니다. POSIX 플랫폼에서 생성 시간을 얻는 방법을 모르겠습니다.