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

هل هنالك طريقة لفتح أكثر من ملف عن طريق استخدام "with open” في بايثون؟

MaxReve

السؤال

أريد أن أقوم بتغيير مجموعة من ملفات في نفس الوقت، حاولت أن أربط مجموعة من تعليمات فتح الملفات مع استخدام تعليمة 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...