python - عيوب - لغة بايثون pdf




كيفية الحصول على تاريخ إنشاء الملف وتعديله/الأوقات في بايثون؟ (7)

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

تحرير: في رمز أحدث ربما يجب عليك استخدام os.path.getmtime() (بفضل كريستيان أودار)
ولكن لاحظ أنه يقوم بإرجاع قيمة نقطة عائمة للوقت مع ثواني الكسور (إذا كان نظام التشغيل الخاص بك يدعم ذلك)

لدي برنامج نصي يحتاج إلى القيام ببعض الأشياء استنادًا إلى إنشاء الملف وتعديل التواريخ ولكن يجب أن يعمل على نظامي التشغيل Linux و Windows.

ما هي أفضل طريقة عبر منصة للحصول على إنشاء الملف وتعديل التاريخ / الأوقات في بيثون؟


أفضل وظيفة للاستخدام لهذا هو 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)

تمكنت من الحصول على وقت إنشاء على posix عن طريق تشغيل الأمر الأساسي للنظام وتعديل الإخراج.

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

تشغيل stat خارج خارج python من المحطة الطرفية (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 كما هو مذكور في التعليقات الأخرى).


لديك عدة خيارات. لأحد ، يمكنك استخدام وظائف os.path.getctime() و 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 لجعل هذه الحقيقة أكثر وضوحًا في التعليقات من خلال توفير رابط إلى مشاركة مدونة مثيرة للاهتمام)


يشمل os.stat وقت الإنشاء. لا يوجد تعريف لـ st_anything لعنصر os.stat() الذي يحتوي على الوقت.

لذلك جرب هذا:

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

قارن ذلك مع تاريخ إنشاء الملف في ls -lah

يجب أن يكونوا متشابهين.


os.stat إرجاع فئة مسماة مع st_ctime وسمات st_ctime . وقت التعديل هو st_mtime على كلا النظامين؛ للأسف ، على نظام التشغيل Windows ، فإن ctime تعني "وقت الإنشاء" ، بينما تعني POSIX "تغيير الوقت". لست على علم بأي طريقة للحصول على وقت الإنشاء على منصات POSIX.


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




file