اذهب إلى المحتوى

السؤال

نشر

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

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

Recommended Posts

  • 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 في مثالي.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...