MaxReve نشر 17 أكتوبر 2015 أرسل تقرير نشر 17 أكتوبر 2015 أريد أن أقوم بتغيير مجموعة من ملفات في نفس الوقت، حاولت أن أربط مجموعة من تعليمات فتح الملفات مع استخدام تعليمة 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فما هي الطريقة الصحيحة لفعل ذلك؟ اقتباس
0 هشام رزق الله نشر 17 أكتوبر 2015 أرسل تقرير نشر 17 أكتوبر 2015 الحل لهذه المشكلة بسيط للغاية، فإذا كنت تستخدم الإصدار 2.7 من بايثون أو 3.1 فيمكنك استبدال تعليمة and بفاصلة (فارزة) كما في المثال التالي:with open('a', 'w') as a, open('b', 'w') as b: do_something() المشكلة لو كنت تستخدم الإصدارات القديمة لبايثون، ففي بعض الأحيان يمكنك استخدام دالة nested من مكتبة contextlib (لا ينصح بذلك)، لكن هذه الدالة لن تعمل بالطريقة التي تتوقعها لفتح مجموعة ملفات، وعلى الرغم من ذلك أنصحك بأن تقوم بمراجعة التوثيق الرسمي للمزيد من المعلومات. اقتباس
0 Ali Haidar Ahmad نشر 2 أبريل 2022 أرسل تقرير نشر 2 أبريل 2022 بتاريخ 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" اقتباس
السؤال
MaxReve
أريد أن أقوم بتغيير مجموعة من ملفات في نفس الوقت، حاولت أن أربط مجموعة من تعليمات فتح الملفات مع استخدام تعليمة with لكنني لم أنجح:
فما هي الطريقة الصحيحة لفعل ذلك؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.