파일 작성 및 수정 날짜/시간을 얻으려면 어떻게 해야 합니까?
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.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
'programing' 카테고리의 다른 글
객체 지향 Javascript 베스트 프랙티스? (0) | 2022.09.18 |
---|---|
정렬되지 않은 목록에 있는 요소의 빈도를 계산하려면 어떻게 해야 합니까? (0) | 2022.09.18 |
2개의 .jar 파일 비교 (0) | 2022.09.18 |
Vuejs 2: img.complete 속성을 검출하는 방법 (0) | 2022.09.18 |
단일 값에 대해 여러 변수가 동일한지 검정하려면 어떻게 해야 합니까? (0) | 2022.09.18 |