استخدام الملفات المتفرقة في بيثون
-
13-09-2020 - |
سؤال
أقوم بإنشاء ملفات متفرقة في بايثون على النحو التالي:
>>> f = open('testfile', 'ab')
>>> f.truncate(1024000)
>>> f.close()
عند الانتهاء من الملف، فإنه يشغل 0 مساحة على القرص، ولكن يتم ضبط حجم inode الخاص به على القيمة المقتطعة (1000 كيلو):
igor47@piglet:~/test$ ls -lh testfile
-rw-r--r-- 1 igor47 igor47 1000K 2010-07-09 04:02 testfile
igor47@piglet:~/test$ du -hs testfile
0 testfile
كيف يمكنني الحصول على استخدام المساحة الحقيقية للملف (الحجم المخصص) داخل بيثون؟ال stat
يُرجع استدعاء الحجم الظاهري للملف، وليس لدي أي فكرة عن كيفية الحصول على الاستخدام الحقيقي بخلاف قراءة الملف بأكمله (قد يصبح كبيرًا جدًا)
>>> os.stat('testfile').st_size
1024000
المحلول
>>> os.stat('testfile').st_blocks*512
0
تادا :)
st_blocks
هو عدد الكتل 512 بايت المخصصة فعليًا للملف.لاحظ أن st_blocks
لا يمكن ضمان تواجده في جميع أنظمة التشغيل، لكن الأنظمة التي تدعم الملفات المتفرقة تفعل ذلك بشكل عام.
لا تنتمي إلى StackOverflow