سؤال

أقوم بإنشاء ملفات متفرقة في بايثون على النحو التالي:

>>> 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 لا يمكن ضمان تواجده في جميع أنظمة التشغيل، لكن الأنظمة التي تدعم الملفات المتفرقة تفعل ذلك بشكل عام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top