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

السؤال

نشر

أريد أن أقوم بتغيير مجموعة من ملفات في نفس الوقت، حاولت أن أربط مجموعة من تعليمات فتح الملفات مع استخدام تعليمة with لكنني لم أنجح:

try:
  with open('a', 'w') as a and open('b', 'w') as b:
    do_something()
except IOError as e:
  print 'Operation failed: %s' % e.strerror

فما هي الطريقة الصحيحة لفعل ذلك؟

Recommended Posts

  • 0
نشر

الحل لهذه المشكلة بسيط للغاية، فإذا كنت تستخدم الإصدار 2.7 من بايثون أو 3.1 فيمكنك استبدال تعليمة and بفاصلة (فارزة) كما في المثال التالي:

with open('a', 'w') as a, open('b', 'w') as b:
    do_something()

المشكلة لو كنت تستخدم الإصدارات القديمة لبايثون، ففي بعض الأحيان يمكنك استخدام دالة nested من مكتبة contextlib (لا ينصح بذلك)، لكن هذه الدالة لن تعمل بالطريقة التي تتوقعها لفتح مجموعة ملفات، وعلى الرغم من ذلك أنصحك بأن تقوم بمراجعة التوثيق الرسمي للمزيد من المعلومات.

  • 0
نشر
بتاريخ On 10/17/2015 at 22:54 قال هشام رزق الله:

الحل لهذه المشكلة بسيط للغاية، فإذا كنت تستخدم الإصدار 2.7 من بايثون أو 3.1 فيمكنك استبدال تعليمة and بفاصلة (فارزة) كما في المثال التالي:


with open('a', 'w') as a, open('b', 'w') as b:
    do_something()

المشكلة لو كنت تستخدم الإصدارات القديمة لبايثون، ففي بعض الأحيان يمكنك استخدام دالة nested من مكتبة contextlib (لا ينصح بذلك)، لكن هذه الدالة لن تعمل بالطريقة التي تتوقعها لفتح مجموعة ملفات، وعلى الرغم من ذلك أنصحك بأن تقوم بمراجعة التوثيق الرسمي للمزيد من المعلومات.

في الوقت الحالي وبدءًا من الإصدار 3.3 أصبح يتم استخدام contextlib.ExitStack، حيث تعطيك الدعم اللازم لفتح عدة ملفات في نفس الوقت. مثال:

with ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in filenames]
    # Do something with "files"

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...