programing

파일 작성 및 수정 날짜/시간을 얻으려면 어떻게 해야 합니까?

projobs 2022. 9. 18. 14:25
반응형

파일 작성 및 수정 날짜/시간을 얻으려면 어떻게 해야 합니까?

Linux와 Windows 모두에서 작동하는 파일 생성 및 수정 날짜/시간을 얻는 가장 좋은 크로스 플랫폼 방법은 무엇입니까?

크로스 플랫폼 방식으로 수정 날짜를 쉽게 얻을 수 있습니다.전화만 걸면 파일이 다음 위치에 있을 때 Unix 타임스탬프를 얻을 수 있습니다.path마지막으로 수정되었습니다.

한편, 파일 작성 날짜는 플랫폼에 따라 다르며, 다음 3개의 큰 OS에서도 다릅니다.

  • Windows 에서는, 파일의ctime( https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx) 에 기재되어 있습니다.작성일이 저장됩니다.Python 에서는, 또는 에의 콜 결과의 어트리뷰트를 사용해 액세스 할 수 있습니다.기능은 Unix에서는 동작하지 않습니다.ctime 파일의 속성 또는 내용이 마지막으로 변경된 시간입니다.
  • Mac 및 기타 Unix 기반 OS에서는 콜 결과 속성을 사용하여os.stat().
  • Linux 에서는 적어도 Python용 C 확장자를 작성하지 않고는 현재 이 작업이 불가능합니다.리눅스와 함께 일반적으로 사용되는 일부 파일 시스템은 생성 날짜를 저장합니다(예:ext4저장하다st_crtime), Linux 커널에서는 액세스 할 수 없습니다.특히 Linux 커널이 반환하는 구조입니다.stat()최신 커널 버전에서는 C의 콜에는 작성 날짜 필드가 포함되어 있지 않습니다.또한 ID가st_crtime현재 Python 소스 어디에도 없습니다.적어도 네가 하고 있다면ext4데이터는 파일 시스템의 inode에 첨부되어 있습니다만, 편리한 액세스 방법은 없습니다.

    Linux에서 차선책은 파일의mtime또는 Atribute를 통해os.stat()결과.그러면 파일 내용이 마지막으로 수정된 시간을 알 수 있으며, 일부 사용 사례에 적합합니다.

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

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

몇 가지 선택권이 있습니다.1개의 경우 및 함수를 사용할 수 있습니다.

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

다른 옵션은 다음과 같습니다.

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.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)

Python 3.4 이상에서는 객체 지향 pathlib 모듈인터페이스를 사용할 수 있습니다.이 인터페이스에는 대부분의 OS 모듈에 대한 래퍼가 포함되어 있습니다.다음은 파일 통계 정보를 가져오는 예입니다.

>>> 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)

은 다음 URL을 참조하십시오.os.stat_result를 참조해 주세요.원하는 수정 시간 동안fname.stat().st_mtime:

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

에서의 작성 이나 Unix는, Windows 의 「Unix」를 합니다.fname.stat().st_ctime:

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

문서에서는 pathlib 모듈에 대한 유용한 정보와 예를 소개합니다.

os.stat

새로운 코드에서는 os.path.getmtime()사용해야 합니다(고맙습니다, Christian Oudard).

단, time_t의 부동소수점 값과 fraction seconds(OS가 지원하는 경우)를 반환합니다.

import os, time, datetime

file = "somefile.txt"
print(file)

print("Modified")
print(os.stat(file)[-2])
print(os.stat(file).st_mtime)
print(os.path.getmtime(file))

print()

print("Created")
print(os.stat(file)[-1])
print(os.stat(file).st_ctime)
print(os.path.getctime(file))

print()

modified = os.path.getmtime(file)
print("Date modified: "+time.ctime(modified))
print("Date modified:",datetime.datetime.fromtimestamp(modified))
year,month,day,hour,minute,second=time.localtime(modified)[:-3]
print("Date modified: %02d/%02d/%d %02d:%02d:%02d"%(day,month,year,hour,minute,second))

print()

created = os.path.getctime(file)
print("Date created: "+time.ctime(created))
print("Date created:",datetime.datetime.fromtimestamp(created))
year,month,day,hour,minute,second=time.localtime(created)[:-3]
print("Date created: %02d/%02d/%d %02d:%02d:%02d"%(day,month,year,hour,minute,second))

인쇄하다

somefile.txt
Modified
1429613446
1429613446.0
1429613446.0

Created
1517491049
1517491049.28306
1517491049.28306

Date modified: Tue Apr 21 11:50:46 2015
Date modified: 2015-04-21 11:50:46
Date modified: 21/04/2015 11:50:46

Date created: Thu Feb  1 13:17:29 2018
Date created: 2018-02-01 13:17:29.283060
Date created: 01/02/2018 13:17:29

주 linux : Linux timetime ctime windows Windows 릅릅릅릅릅 。
Windows の windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows windows 。
Linux 사용자는 자신의 시간을 "변경 시간"으로 알고 있습니다.

mod time을 취득하는 방법은 os.path.getmtime() 또는 os.stat() 두 가지가 있지만 ctime은 신뢰할 수 있는 크로스 플랫폼이 아닙니다(아래 참조).

os.path.getmtime()

getmtime(패스)
이치노반환값은 에폭 이후의 초수를 나타내는 숫자입니다(시간 모듈 참조).파일이 없거나 액세스할 수 없는 경우 os.error를 발생시킵니다.1.52 버전 1.5.2 os.True를 번호가.2.3일 경우:os.stat_float_times() True입니다.

os.stat()

stat(패스)
지정된 경로로 stat() 시스템콜을 수행합니다. 반환값은 stat 구조의 멤버, 즉 st_mode(보호 비트), st_ino(inode 번호), st_dev(디바이스), st_nlink(하드 링크 수), st_uid(오너의 사용자 ID), st_gid(오너의 그룹 ID), st_size(파일 크기, 바이트 수), st_time(가장 최근의 액세스 시간)에 대응하는 속성입니다. 최신 콘텐츠 수정), st_ctime(플랫폼에 따라 다름, Unix에서 가장 최근에 메타데이터가 변경된 시간 또는 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을 가져옵니다.

os.stat는 이름 과 '태플'이 됩니다.st_mtime ★★★★★★★★★★★★★★★★★」st_ctime★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★st_mtime아쉽게도 Windows에서는 " " " " " Windows " 입니다.ctime는 "작성 시간"을 의미하지만 POSIX에서는 "변경 시간"을 의미합니다.POSIX 플랫폼의 작성 시간을 취득할 수 있는 방법은 모릅니다.

파일 작성 시간에 대한 크로스 플랫폼 액세스를 구현하는 라이브러리를 살펴보는 것이 좋습니다.

from crtime import get_crtimes_in_dir

for fname, date in get_crtimes_in_dir(".", raise_on_error=True, as_epoch=False):
    print(fname, date)
    # file_a.py Mon Mar 18 20:51:18 CET 2019
>>> import os
>>> os.stat('feedparser.py').st_mtime
1136961142.0
>>> os.stat('feedparser.py').st_ctime
1222664012.233
>>> 

하지 않은 는, 을 사용할 .os.lstat빌트인

>>> os.lstat("2048.py")
posix.stat_result(st_mode=33188, st_ino=4172202, st_dev=16777218L, st_nlink=1, st_uid=501, st_gid=20, st_size=2078, st_atime=1423378041, st_mtime=1423377552, st_ctime=1423377553)
>>> os.lstat("2048.py").st_atime
1423378041.0

os.stat작성 시간이 포함되어 있습니다.st_anything의 os.stat()시간을 담고 있습니다.

그럼 이렇게 해 보세요.

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

ls -lah 파일의 작성일과 비교합니다.

둘 다 똑같아야 해요.

언급URL : https://stackoverflow.com/questions/237079/how-do-i-get-file-creation-and-modification-date-times

반응형