• 1

كيف أتأكد ما إذا كان الكائن هو ملف في بايثون؟

أريد التأكد من بعض الكائنات الموجودة في سكربت بايثون ما إذا كانت تتصرف كملف حقيقي أي أنها على سبيل المثال تمتلك دوال للقراءة read() وللكتابة write()، فهل هذا الأمر ممكن؟

جربت استخدامif not hasattr(fp, 'read') فهل هذه الطريقة جيدة؟

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

سمعت عن الكثير من المحترفين أن عملية التأكد من نوع كائن ملف غير جيدة ولا يُنصح بها في شيفرتك البرمجية إلا في الضرورة.
فالكتابة في بايثون حيوية - dynamic -، فالطريقة التي ذكرتها وهي التأكد ما إذا كان المتغير هو كائن ملف أفضل من استخدام طريقة تجربة التعامل مع المتغير كملف والتعامل مع رسالة الخطأ كما يفعل البعض.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هذه العملية معقدة رغم ما يبدوا عليها من بساطة.

فمثلًا ليس كائن الملف الذي تنشئه بإستخدام الدالة المدمجة ()open الوحيد الذي يملك وسائل مثل ()read وغيرها.

لتوضيح مقصدي أكثر تفقد التالي:

from StringIO import StringIO

#إنشاء كائن شبيه-بالملف file-like

fl=StringIO()

#الكتابة على الكائن

fl.write("Hello, I'm Samer and this is a Test.\n")

#العودة لبداية الملف

fl.seek(0)

 

#قراءة الملف

print fl.read()

#إغلاق الملف

fl.close()

* الجدير بالذكر أنني إستخدمت بايثون 2.7.x في مثالي.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن