จะรับไฟล์สำหรับสร้างและแก้ไขวันที่ / เวลาใน Python ได้อย่างไร?


932

ฉันมีสคริปต์ที่ความต้องการที่จะทำบางสิ่งที่อยู่บนพื้นฐานของการสร้างไฟล์และการปรับเปลี่ยนวัน แต่มีการทำงานบนลินุกซ์และวินโดวส์

วิธีข้ามแพลตฟอร์มที่ดีที่สุดในการสร้างและแก้ไขไฟล์date/timesในPythonคืออะไร


57
คุณไม่สามารถสร้างเวลาในการสร้างไฟล์ข้ามแพลตฟอร์มได้ ดูdocs.python.org/library/os.path.html#os.path.getctime
Glyph

คำตอบ:


620

การได้รับวันที่แก้ไขบางอย่างในแบบข้ามแพลตฟอร์มเป็นเรื่องง่ายเพียงแค่โทรแล้วคุณจะได้รับการประทับเวลา Unix เมื่อไฟล์ที่ถูกแก้ไขครั้งล่าสุดos.path.getmtime(path)path

การได้รับวันที่สร้างไฟล์ในทางกลับกันเป็นเรื่องยุ่งและขึ้นอยู่กับแพลตฟอร์มซึ่งแตกต่างกันระหว่างสามระบบปฏิบัติการขนาดใหญ่:

  • บนWindowsไฟล์ctime(จัดทำเป็นเอกสารที่https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx ) จัดเก็บวันที่สร้าง คุณสามารถเข้าถึงนี้ในหลามผ่านos.path.getctime()หรือแอตทริบิวต์ของผลมาจากการเรียกร้องให้มี.st_ctime os.stat()นี้จะไม่ทำงานบนระบบปฏิบัติการยูนิกซ์ที่ctime จะเป็นครั้งสุดท้ายว่าแอตทริบิวต์ของไฟล์หรือเนื้อหาที่มีการเปลี่ยนแปลง
  • บนMac , เช่นเดียวกับบางระบบปฏิบัติการ Unix อื่น ๆ ตามที่คุณสามารถใช้แอตทริบิวต์ของผลมาจากการเรียกร้องให้มี.st_birthtimeos.stat()
  • บนLinuxนี่เป็นไปไม่ได้อย่างน้อยในตอนนี้โดยไม่ต้องเขียน C extension สำหรับ Python แม้ว่าบางระบบไฟล์ที่ใช้กันทั่วไปกับ Linux ทำร้านค้าวันที่สร้าง (ตัวอย่างเช่นext4เก็บไว้ในst_crtime), ลินุกซ์เคอร์เนลข้อเสนอวิธีการเข้าถึงพวกเขา ; โดยเฉพาะอย่างยิ่ง structs มันกลับมาจากstat()การโทรใน C เป็นของเคอร์เนลรุ่นล่าสุดไม่ได้มีสาขาวันที่สร้างใดนอกจากนี้คุณยังจะเห็นว่าตัวระบุst_crtimeไม่ได้ในขณะนี้มีที่ใดก็ได้ในแหล่งหลาม อย่างน้อยถ้าคุณเปิดอยู่ext4ข้อมูลจะถูกแนบกับ inodes ในระบบไฟล์ แต่ไม่มีวิธีที่สะดวกในการเข้าถึง

    สิ่งที่ดีที่สุดถัดไปบน Linux คือการเข้าถึงไฟล์mtimeโดยos.path.getmtime()ใช้.st_mtimeคุณสมบัติหรือ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

9
ฉันพยายามทำให้ดีที่สุดเพื่อรวมเข้าด้วยกัน (และใช้เวลาสองสามชั่วโมงในการค้นคว้า) และฉันแน่ใจว่าอย่างน้อยมันก็ถูกต้องมากกว่าคำตอบที่เคยอยู่ที่นี่มาก่อน แต่นี่เป็นหัวข้อที่ยากมากและฉัน ชื่นชมการแก้ไขคำชี้แจงหรือข้อมูลอื่น ๆ ที่ผู้คนสามารถนำเสนอได้ โดยเฉพาะอย่างยิ่งฉันต้องการสร้างวิธีการเข้าถึงข้อมูลนี้บนext4ไดรฟ์ภายใต้ Linux และฉันต้องการเรียนรู้ว่าเกิดอะไรขึ้นเมื่อ Linux อ่านไฟล์ที่เขียนโดย Windows หรือ vica ในทางกลับกันเนื่องจากพวกเขาใช้st_ctimeแตกต่างกัน
Mark Amery

25
โดยทั่วไปเวลาในการสร้างไฟล์นั้นค่อนข้างไร้ประโยชน์ เมื่อคุณเปิดไฟล์ที่มีอยู่เพื่อเขียนด้วยโหมด"w"มันไม่ได้แทนที่มันเพียงแค่เปิดไฟล์ที่มีอยู่และตัดทอน แม้ว่าเนื้อหาของไฟล์จะไม่เกี่ยวข้องอย่างสมบูรณ์กับสิ่งที่มีอยู่ในการสร้างคุณยังคงได้รับการบอกว่าไฟล์นั้น "ถูกสร้าง" ก่อนเวอร์ชั่นปัจจุบัน ในทางกลับกันบรรณาธิการที่ใช้การแทนที่อะตอมมิกในการบันทึก (ไฟล์ต้นฉบับจะถูกแทนที่ด้วยไฟล์ชั่วคราว work-in-คืบหน้าใหม่) จะแสดงวันที่สร้างล่าสุดมากกว่าแม้ว่าคุณเพิ่งลบหนึ่งอักขระ ใช้เวลาแก้ไขไม่ด้วงสำหรับเวลาสร้าง
ShadowRanger

3
หลังจากผ่านไปหลายปีในที่สุดฉันก็พบว่ามีประโยชน์สำหรับการสร้างไฟล์! ฉันกำลังเขียนโค้ดเพื่อตรวจสอบระเบียบการตั้งชื่อไฟล์ในบางไดเรกทอรีดังนั้นก่อนอื่นเลยฉันต้องการพิจารณาไฟล์ที่ถูกตั้งชื่อเป็นครั้งแรกหลังจากการประชุมได้เริ่มขึ้นแล้ว แทนที่เนื้อหาทั้งหมด (mtime) ไม่เกี่ยวข้อง: ถ้ามันมีอยู่แล้วมันก็เป็นคุณปู่
สตีฟเจสซอพ

1
สวัสดีมาร์ค ฉันเสนอการทำให้เข้าใจง่าย บน Linux การกลับมาstat.st_ctimeมีความเกี่ยวข้องมากขึ้นเนื่องจากในหลายกรณีเวลาของการเปลี่ยนแปลงข้อมูลเมตาครั้งล่าสุดอาจเป็นเวลาการสร้าง (อย่างน้อยctimeก็ใกล้เคียงกับเวลาการสร้างจริงมากกว่าmtime) stat = os.stat(path_to_file); try: return stat.st_birthtime; except AttributeError: return stat.st_ctimeดังนั้นคุณก็สามารถเปลี่ยนข้อมูลโค้ดของคุณโดย คุณคิดอย่างไร? ไชโย
โอลิเบอร์

4
@olibre "อย่างน้อย ctime ใกล้เคียงกับเวลาสร้างจริงมากกว่า mtime" - ไม่ใช่มันไม่ใช่; นี่เป็นสิ่งที่ฉันเคยเห็นมาหลายครั้ง แต่มันผิดทั้งหมด จนกว่าคุณจะได้ messed ด้วยตนเองด้วยค่าใน inode ของคุณctimeควรจะเท่ากับหรือภายหลังกว่าmtimeเพราะmtimeการเปลี่ยนแปลงที่ทำให้เกิดctimeเปลี่ยนแปลง (เพราะmtimeตัวเองจะถือว่าเป็น "เมตาดาต้า") ดูstackoverflow.com/a/39521489/1709587ที่ฉันให้รหัสตัวอย่างเพื่อแสดงสิ่งนี้
Mark Amery

676

คุณมีทางเลือกสองทาง สำหรับหนึ่งคุณสามารถใช้os.path.getmtimeและ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 เปลี่ยนไป (ขอบคุณ kojiro ที่ทำให้ข้อเท็จจริงนั้นชัดเจนยิ่งขึ้นในความคิดเห็นโดยให้ลิงก์ไปยังโพสต์บล็อกที่น่าสนใจ)


169
เพียงในกรณีที่คนพลาดท่า @ คิดเห็นสัญลักษณ์ของคำถามที่ctime ไม่เวลาที่สร้างได้หมายความว่าในระบบ ฉันสงสัยว่ามีกี่คนที่อ่านบทความนี้ในช่วงสามปีที่ผ่านมาและเขียนโค้ดแบบบั๊ก
kojiro

16
โปรดจำไว้ว่าตัวอย่างแรกให้สตริงแก่คุณไม่ใช่ datetime หรือตัวเลข
gak

1
@kojiro โพสต์บล็อกที่คุณได้เชื่อมโยงกับอาจจะเป็นที่ชัดเจนมากขึ้นว่าบน Unix ของไฟล์ctimeได้รับการปรับปรุงเมื่อmtimeไม่ (ตั้งแต่mtimeเป็น "เมตาดาต้า") และเพื่อให้ctimeเป็นปกติมักจะเท่ากับหรือไปข้างหน้าของ mtimeปฏิบัติctimeเหมือนเวลา "สร้าง" จึงไม่สมเหตุสมผลเลย -1!
Mark Amery

ตัวเลือกแรกของคุณส่งคืนผลลัพธ์เดียวกันสำหรับการสร้างไฟล์และการแก้ไขครั้งสุดท้าย! Last modified: Fri Jan 31 11:08:13 2020และ Created: Fri Jan 31 11:08:13 2020บน Ubuntu Ubuntu 16.04!
Färid Alijani

ฉันค้นพบว่าtime.ctime(os.path.getmtime(file))คืนค่าสตริง 2 ประเภทขึ้นอยู่กับว่าไฟล์นั้นถูกแก้ไขโดยระบบหรือโดยผู้ใช้ หากมีการแก้ไขโดยระบบสตริงจะมี 2 ช่องว่างระหว่างเดือนและวัน ฉันไม่รู้ว่าทำไม
Matteo Antolini

376

ฟังก์ชั่นที่ดีที่สุดที่จะใช้สำหรับเรื่องนี้คือos.path.getmtime () os.stat(filename).st_mtimeภายในเพียงแค่นี้การใช้งาน

โมดูล datetime เป็น timestamps ที่จัดการได้ดีที่สุดดังนั้นคุณสามารถรับวันที่แก้ไขเป็น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)

1
คำตอบนี้ก็ผิดเล็กน้อยเช่นกัน getmtimeเป็นสิ่งที่ใกล้ที่สุดที่มีอยู่ใน Unix (ซึ่งไม่สามารถสร้างวันที่สร้างได้) แต่ไม่ใช่ฟังก์ชั่นที่ดีที่สุดในการใช้งานบน Windows ซึ่งctimeเป็นช่วงเวลาในการสร้าง
Mark Amery

3
@MarkAmery - คำตอบนี้ถูกระบุไว้อย่างชัดเจนว่าเป็นเรื่องของเวลาในการแก้ไข
ArtOfWarfare

47

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

แก้ไข: ในรหัสที่ใหม่กว่าคุณควรใช้os.path.getmtime () (ขอบคุณ Christian Oudard)
แต่โปรดทราบว่ามันคืนค่าทศนิยมของ time_t ด้วยเศษเสี้ยววินาที (หากระบบปฏิบัติการของคุณรองรับ)


44
os.path.getmtime () ทำเพื่อสิ่งนี้และง่ายขึ้น
Christian Oudard

5
ประโยค "in newer code" ที่นี่เป็นการทำให้เข้าใจผิดเล็กน้อย os.path.getmtime()ได้รับมาตั้งแต่ Python 1.5.2 (ดูเอกสารเก่า ) ที่ปล่อยออกมาก่อนที่ฉันจะสูญเสียฟันน้ำนมของฉันเกือบสิบปีก่อนที่คุณจะเขียนคำตอบดั้งเดิมนี้
Mark Amery

39

มีสองวิธีในการรับเวลา mod, os.path.getmtime () หรือ os.stat () แต่ ctime ไม่น่าเชื่อถือข้ามแพลตฟอร์ม (ดูด้านล่าง)

os.path.getmtime ()

getmtime ( path )
คืนค่าเวลาของการแก้ไข path ครั้งล่าสุด ค่าที่ส่งคืนคือตัวเลขที่ระบุจำนวนวินาทีตั้งแต่ยุค (ดูโมดูลเวลา) เพิ่ม os.error หากไฟล์ไม่มีอยู่หรือไม่สามารถเข้าถึงได้ ใหม่ในรุ่น 1.5.2 เปลี่ยนเป็นเวอร์ชั่น 2.3: หาก os.stat_float_times () ส่งคืนค่า True ผลลัพธ์จะเป็นเลขทศนิยม

os.stat ()

stat ( เส้นทาง )
ทำการเรียกระบบ stat () บนเส้นทางที่กำหนด ค่าส่งคืนเป็นวัตถุที่มีคุณลักษณะที่สอดคล้องกับสมาชิกของโครงสร้าง stat ได้แก่ : st_mode (บิตป้องกัน), st_ino (หมายเลขไอโหนด), st_dev (อุปกรณ์), st_nlink (จำนวนฮาร์ดลิงก์), st_uid (ID ผู้ใช้ของเจ้าของ ), st_gid (ID กลุ่มของเจ้าของ), st_size (ขนาดของไฟล์, เป็นไบต์), st_atime (เวลาที่เข้าถึงล่าสุด), st_mtime (เวลาของการแก้ไขเนื้อหาล่าสุด), 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 ตามลำดับ


13

ใน Python 3.4 และสูงกว่าคุณสามารถใช้ส่วนต่อประสานโมดูล pathlibเชิงวัตถุซึ่งรวมถึง wrappers สำหรับโมดูล 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)

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่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


11

os.statส่งคืน tuple ที่มีชื่อด้วยst_mtimeและst_ctimeคุณลักษณะ เวลาแก้ไขอยู่st_mtimeบนทั้งสองแพลตฟอร์ม น่าเสียดายที่บน Windows ctimeหมายถึง "เวลาสร้าง" ในขณะที่ POSIX หมายถึง "เปลี่ยนเวลา" ฉันไม่ทราบว่าจะใช้วิธีใดในการสร้างเวลาบนแพลตฟอร์ม POSIX


ต่อไปนี้เป็นข้อมูลเพิ่มเติมเกี่ยวกับแท็ก - ทูเปิล: stackoverflow.com/questions/2970608/…พวกเขาทำงานเหมือนทูเปิล แต่ลองdir(..)ใช้ เช่นdir(os.stat(os.listdir('.')[0]))
Evgeni Sergeev

9
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

-1: เช่นเดียวกับคำตอบอื่น ๆ ซึ่งจะไม่ทำให้คุณมีเวลาสร้างไฟล์บน Windows (ซึ่งไม่ได้กล่าวถึงอีกครั้งในคำตอบ)
ntninja

@ntninja คุณแน่ใจหรือไม่ ฉันใช้ Windows และมันใช้งานได้จริง ฉันเขียนสคริปต์นี้ในต้นปี 2558 ฉันพบว่ามันชัดเจนขึ้นตรงประเด็นเสร็จสมบูรณ์และอธิบายตนเองมากกว่าคนอื่น ๆ ที่นี่ (ซึ่งฉันตัดสินใจที่จะมองขึ้นที่นี่แทนสคริปต์เก่าของฉันเพียงแค่ใส่หีบมีอะไรใหม่ ๆ ไม่ ... นี่คือวิธี)
Puddle

โอ้ฉันตั้งใจจะพูดว่า "... นี่จะไม่ทำให้คุณมีเวลาสร้างไฟล์ยกเว้นว่าคุณใช้ Windows" ขออภัย! ความจริงยังคงอยู่ที่คำตอบนี้ไม่สามารถพกพาได้และไม่ได้พูดถึงความจริงนี้ (ตัวอย่างเอาต์พุตบน Linux: pastebin.com/50r5vGBE )
ntninja

@ntninja คุณจะไปบอกคนอื่นแล้วงั้นเหรอ?
บ่อ

ได้ทิ้งความคิดเห็นอื่น ๆ ไว้ที่นี่แล้วและฉันจะโพสต์คำตอบที่ใช้กับ (ล่าสุด) Linux เช่นกันในไม่ช้า แต่จริงๆแล้วสิ่งเดียวที่ผิดในโพสต์ของคุณคือมันเป็นคำตอบสำหรับ Windows เท่านั้นที่ไม่ได้พูดถึงข้อเท็จจริงนี้ ในคำถาม OP ได้ขอเฉพาะโซลูชันที่เข้ากันได้กับ Windows และ Linux เช่นนี้ฉันคิดว่ามันจะมีประโยชน์มากถ้าคุณเพิ่ม "รายละเอียด" นี้ไว้ที่ด้านบนเพื่อให้ผู้คนไม่เข้าใจผิดว่า ctime เป็นสิ่งที่พวกเขามองหาเมื่อกำหนดเป้าหมายหลายแพลตฟอร์ม
ntninja

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

-1: ตามที่กล่าวไว้ที่อื่นสิ่งนี้จะไม่ให้เวลาในการสร้างไฟล์ของคุณเว้นแต่ว่าคุณใช้ Windows (ซึ่งคำตอบไม่ได้กล่าวถึง!)
ntninja

0

หากการติดตามลิงก์สัญลักษณ์ไม่สำคัญคุณสามารถใช้os.lstatbuiltin ได้

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

นี้จะให้เวลาของการอ่านที่ผ่านมา (อย่างน้อยใน Unix) ซึ่งแน่นอนไม่ได้เป็นสิ่งที่ถูกถามหา
Mark Amery

0

มันอาจคุ้มค่าที่จะดูcrtimeไลบรารีที่ใช้การเข้าถึงข้ามแพลตฟอร์มกับเวลาในการสร้างไฟล์

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

1
ฉันขอแนะนำอย่างยิ่งกับเรื่องนี้: มันใช้งานdebugfsบน Linux ซึ่งโดยนิยามไม่เสถียรต้องใช้การเข้าถึงรูทระดับบนสำหรับทุกสิ่งและในทุก ๆ ด้านมีแนวโน้มที่จะเป็นหนึ่งในสิ่งที่แม่ของคุณเตือนคุณเสมอ (แต่ใช่มันอาจจะทำงานได้ถ้าคุณหมดหวังจริงๆและเป็น superuser ตัวจริงในระบบที่ไม่มีบูทที่ปลอดภัย…)
ntninja

@ntinja ฉันอาจจะไม่เคยใช้ในการผลิต แต่มันอาจจะมีประโยชน์สำหรับ "การเขียนสคริปต์ที่บ้าน"
Delgan

-2

os.statไม่รวมถึงเวลาการสร้าง ไม่มีคำจำกัดความของ st_anything สำหรับองค์ประกอบของos.stat()สิ่งนั้นที่มีเวลา

ลองทำสิ่งนี้:

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

เปรียบเทียบกับวันที่สร้างของคุณบนไฟล์ใน ls -lah

พวกเขาควรจะเหมือนกัน


6
ไม่ถูกต้อง! os.stat ('feedparser.py') [8] หมายถึง st_mtime ไม่ใช่เวลาสร้าง โปรดดูเอกสารประกอบ: docs.python.org/library/os.html#os.stat
millerdev

4
โปรดใช้. st_ctime แทนตัวเลขที่น่าเกลียด [8]
guettli

-3

ฉันสามารถรับเวลาการสร้างบน posix ได้โดยการรันคำสั่ง stat ของระบบและแยกเอาต์พุต

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

เรียกใช้ stat ภายนอก python จาก Terminal (OS X) ที่ส่งคืน:

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 ตามความเห็นอื่น ๆ ที่ระบุไว้)


13
-1: แยกออกหมายสำหรับมนุษย์จากคำสั่งของเชลล์เป็นมากความคิดที่ดี และคำสั่งนี้ไม่ได้เข้ากันได้ข้าม
MestreLion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.