python 텍스트 - 파이썬에서 파일 생성 및 수정 날짜 / 시간을 얻는 방법?




읽기 atime (10)

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

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


Answers

시스템의 stat 명령을 실행하고 출력을 파싱하여 posix에서 생성 시간을 얻을 수있었습니다.

commands.getoutput('stat FILENAME').split('\"')[7]

터미널 (OS X)에서 파이썬 밖에서 stat를 실행하면 다음과 같이 반환됩니다.

805306374 3382786932 -rwx------ 1 km staff 0 1098083 "Aug 29 12:02:05 2013" "Aug 29 12:02:05 2013" "Aug 29 12:02:20 2013" "Aug 27 12:35:28 2013" 61440 2150 0 testfile.txt

... 네 번째 datetime은 파일 작성입니다 (다른 주석이 언급 된대로 ctime 변경 시간이 아니라).


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

날짜 시간 모듈은 타임 스탬프를 가장 잘 처리하기 때문에 수정 날짜를 다음과 같이 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)

mod 시간, os.path.getmtime () 또는 os.stat ()을 얻는 방법은 두 가지가 있지만 ctime은 신뢰할 수없는 교차 플랫폼이 아닙니다 (아래 참조).

os.path.getmtime()

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

os.stat()

통계 ( 경로 )
주어진 경로에서 stat () 시스템 호출을 수행하십시오. 반환 값은 st_mode (보호 비트), st_ino (inode 번호), st_dev (장치), st_nlink (하드 링크 수), st_uid (소유자의 사용자 ID)와 같은 stat 구조체의 멤버에 해당하는 속성을 가진 객체입니다. ), st_gid (소유자의 그룹 ID), st_size (파일 크기, 바이트 수), st_atime (최근 액세스 시간), st_mtime (최근 내용 수정 시간), st_ctime (플랫폼에 따라 다르지만 가장 최근의 메타 데이터 변경 시간 유닉스에서, 또는 창에서 창조의 시간) :

>>> 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을 얻습니다.


>>> import os
>>> os.stat('feedparser.py').st_mtime
1136961142.0
>>> os.stat('feedparser.py').st_ctime
1222664012.233
>>> 

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 를 원하는 수정 시간에 대해 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 사용 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.path.getmtime(path) 호출하면 path 에있는 파일이 마지막으로 수정 된 Unix 타임 스탬프를 얻게됩니다.

반면에 파일 생성 날짜를 얻는 것은 피치 및 플랫폼에 따라 다르며 세 가지 큰 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://.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.getmtime(path)os.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() 은 * nix 시스템에서의 생성 시간을 나타내지 않고 마지막으로 inode 데이터가 변경된 시간을 나타냅니다. (재미있는 블로그 게시물에 대한 링크를 제공함으로써 코멘트에서 그 사실을 더 분명하게하는 코지로 덕분에)


os.statst_mtimest_ctime 속성을 가진 명명 된 튜플을 반환합니다. 수정 시간은 두 플랫폼 모두에서 st_mtime 입니다. 불행히도, Windows에서 ctime 은 "creation time"을 의미하는 반면, POSIX에서는 "change time"을 의미합니다. POSIX 플랫폼에서 생성 시간을 얻는 방법에 대해서는 잘 모르겠습니다.


os.stat 에는 생성 시간이 포함됩니다. 시간을 포함하는 os.stat() 의 요소에 대한 st_anything 정의가 없습니다.

그래서 이것을 시험해보십시오.

os.stat('feedparser.py')[8]

ls -lah 파일의 작성 날짜와 비교해보십시오.

그들은 동일해야합니다.


웹 근로자 를 사용하고 있고 작업자의 범위에 추가 스크립트를 포함하려는 경우 head 태그에 스크립트를 추가하는 것과 관련하여 제공되는 다른 대답은 작동하지 않습니다.

다행스럽게도 웹 워커는 독자적인 importScripts 함수를 가지고 있습니다.이 함수는 웹 워커 (Web Worker)의 범위에서 전역 함수이며, 브라우저 자체 에 고유 합니다.

또는 두 번째로 높은 질문에 대한 답변으로 두 번째로 높은 점수를 얻은 RequireJS 는 웹 작업자 내에서 스크립트를 포함하여 처리 할 수 ​​있습니다 ( importScripts 자체를 호출 할 수 있지만 다른 유용한 기능이 있음).





python file