تقنية

as_file في بايثون: هل يبقى مسار المورد بعد with؟

عضو ومسار مؤقت
ملف أثناء السياق. [1] [2] [3] [4]

نستخرج عضو ZIP مؤلفًا مؤقتًا. [1] [2] [3] [4]

الخلاصة السريعة

لا؛ ملف العضو المؤقت يُحذف بعد السياق. [1] [2] [3] [4]

  • نكتب R في r.txt بأرشيف الذاكرة. [1] [2] [3] [4]
  • as_file ينشئ ملفًا مؤقتًا لمساره هنا. [1] [2] [3] [4]
  • داخل with تطابق البايتات؛ النتيجة True. [1] [2] [3] [4]
  • بعدها يعطي exists() القيمة False. [1] [2] [3] [4]
  • pathlib.Path الموجود يُعاد دون هذا الحذف. [1] [2] [3] [4]
  • اختبرنا 3.12.14؛ عضو واحد بلا ضغط، دون اختبار مجلدات أو أمان. [1] [2] [3] [4]

المثال

import io,zipfile as z
from importlib.resources import as_file
b=io.BytesIO()
with z.ZipFile(b,'w') as a:
 a.writestr('r.txt',b'R')
 with as_file(z.Path(a,'r.txt')) as p:
  print(p.read_bytes()==b'R')
 print(p.exists())

[1] [2] [3] [4]

المخرجان True ثم False. [1] [2] [3] [4]

عمر المسار

المؤقت يُحذف عند خروج السياق، مع بقاء عضو الأرشيف. [1] [2] [3] [4]

داخل السياق وبعده
المؤقت في مثال ZIP. [1] [2] [3] [4]

استخدم المسار أثناء السياق. أما pathlib.Path الموجود فيُعاد دون إزالة الملف. [1] [2] [3] [4]

الحدود

التجربة تنشئ ملفًا مؤقتًا حقيقيًا. نختبر عضوًا مخزنًا فقط؛ لا مجلدات أو ضمان أمان. [1] [2] [3] [4]

المراجع

  1. Python: importlib.resources
  2. CPython 3.12.14: resources common
  3. Python: zipfile
  4. Python: pathlib
  5. موضوع تك: لغة بايثون — مفردات
  6. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.