python - ملفات - كيفية التحقق من حجم الملف في بيثون؟




كتابة برنامج بلغة بايثون (5)

أنا أكتب سيناريو بايثون في ويندوز. أريد أن أفعل شيئًا بناءً على حجم الملف. على سبيل المثال ، إذا كان الحجم أكبر من 0 ، فسأرسل رسالة بريد إلكتروني إلى شخص ما ، وإلا استمر في أشياء أخرى.

كيف أتحقق من حجم الملف؟


التمسك الصارم بالسؤال ، سيكون رمز python (+ pseudo-code):

import os
file_path = r"<path to your file>"
if os.stat(file_path).st_size > 0:
    <send an email to somebody>
else:
    <continue to other things>

باستخدام os.path.getsize :

>>> import os
>>> b = os.path.getsize("/path/isa_005.mp3")
>>> b
2071611L

الإخراج في بايت.


تعمل الإجابات الأخرى على ملفات حقيقية ، ولكن إذا كنت بحاجة إلى شيء يعمل مع "كائنات تشبه الملفات" ، فجرّب هذا:

# f is a file-like object. 
f.seek(0, os.SEEK_END)
size = f.tell()

إنه يعمل للملفات الحقيقية و StringIO ، في الاختبار المحدود. (Python 2.7.3.) واجهة برمجة التطبيقات "object-like object" ليست في الحقيقة واجهة صارمة ، بالطبع ، لكن وثائق API تقترح أن الكائنات المشابهة للملفات يجب أن تدعم seek() وأن tell() .

تصحيح

هناك اختلاف آخر بين هذا و os.stat() أنه يمكنك stat() ملف حتى إذا لم يكن لديك إذن بقراءته. من الواضح أن نهج البحث / الإخطار لن يعمل إلا إذا كان لديك إذن القراءة.

تحرير 2

في اقتراح جوناثون ، وهنا نسخة بجنون العظمة. (يترك الإصدار أعلاه مؤشر الملف في نهاية الملف ، لذا إذا كنت تحاول القراءة من الملف ، ستحصل على صفر بايت مرة أخرى!)

# f is a file-like object. 
old_file_position = f.tell()
f.seek(0, os.SEEK_END)
size = f.tell()
f.seek(old_file_position, os.SEEK_SET)

هناك خدعة bitshift يمكنني استخدامها إذا أردت التحويل من bytes إلى أي وحدة أخرى. إذا قمت بالتبديل الصحيح بمقدار 10 فأنت تقوم بتحويله بشكل أساسي عن طريق أمر (متعدد).

على سبيل المثال: 5GB are 5368709120 bytes

print (5368709120 >> 10)  # 5242880 kilo Bytes (kB)
print (5368709120 >> 20 ) # 5120 Mega Bytes(MB)
print (5368709120 >> 30 ) # 5 Giga Bytes(GB)

import os


def convert_bytes(num):
    """
    this function will convert bytes to MB.... GB... etc
    """
    for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
        if num < 1024.0:
            return "%3.1f %s" % (num, x)
        num /= 1024.0


def file_size(file_path):
    """
    this function will return the file size
    """
    if os.path.isfile(file_path):
        file_info = os.stat(file_path)
        return convert_bytes(file_info.st_size)


# Lets check the file size of MS Paint exe 
# or you can use any file path
file_path = r"C:\Windows\System32\mspaint.exe"
print file_size(file_path)

نتيجة:

6.1 MB




python