التابع ZipFile.open()
في بايثون
يتيح التابع الوصول إلى عضو في الأرشيف ككائن ثنائي شبيه بالملفات.
البنية العامة
ZipFile.open(name, mode='r', pwd=None, *, force_zip64=False)
المعاملات
name
اسم الملف المراد الوصول إليه ضمن الأرشيف أو كائن ZipInfo
.
mode
إن توفّرت قيمة لهذا المعامل فيجب أن تكون 'r'
(القيمة الافتراضية) أو 'w'
.
عند استخدام الوضع 'r'
يكون الكائن الشبيه بالملفات (ZipExtFile
) للقراءة فقط ويقدّم التوابع التالية:
read()
, readline()
, readlines()
, seek()
, tell()
, __iter__()
, __next__()
.
يمكن لهذه الكائنات أن تعمل بمعزل عن ZipFile
.
إن أخذ المعامل mode
القيمة 'w'
فإنّ التابع يعيد مقبض ملف قابل للكتابة والذي يدعم التابع write()
، وعندما يكون مقبض الملف القابل للكتابة مفتوحًا تؤدي محاولة قراءة ملفات ZIP أخرى أو الكتابة فيها إلى إطلاق الاستثناء ValueError
.
إن لم يكن حجم الملف المضاف إلى الأرشيف معلومًا مسبقًا ولكنّه قد يتجاوز 2 GiB
فيستحسن تمرير القيمة force_zip64=True
لضمان قدرة صيغة الترويسة على التعامل مع ملفات كبيرة. أما إن كان حجم الملف معروفًا مسبقًا، فيمكن إنشاء كائن ZipInfo
مع تعيين قيمة للمعامل file_size
واستخدام هذا الكائن كقيمة للمعامل name
.
pwd
كلمة المرور المستخدمة لفك التعمية عن ملفات ZIP المعمّاة.
ملاحظات:
- يمكن للتوابع
open()
وread()
وextract()
أن تتعامل مع أسماء الملفات أو مع كائناتZipInfo
. تظهر فائدة هذا الأمر عند القراءة من ملفات ZIP تحتوي على ملفات ZIP ذات أسماء مكرّرة. - لم تعد الدالة البانية تدعم الوضع
'U'
في الإصدار 3.6 من اللغة، ويمكن استخدام الكائنio.TextIOWrapper
لقراءة الملفات النصية المضغوطة في وضع universial newlines. - يمكن استخدام التابع
open()
لكتابة الملفات إلى ملف الأرشيف باستخدام القيمة'w'
للمعاملmode
في الإصدار 3.6 من بايثون. - يؤدي استدعاء التابع
open()
على كائنZipFile
مغلق إلى إطلاق الاستثناءValueError
في الإصدار 3.6 من بايثون. أما في الإصدارات السابقة فكان التابع يُطلق الاستثناءRuntimeError
.
أمثلة
يبين المثال التالي آلية عمل التابع:
>>> import zipfile
>>> zip = zipfile.ZipFile('files.zip')
>>> file = zip.open('file1.txt')
>>> file.read()
b'Hsoub Wiki.\n'
يمكن للتابع open()
أن يدير السياق ما يعني إمكانية استخدامه مع عبارة with
:
>>> with zipfile.ZipFile('files.zip') as myzip:
... with myzip.open('file1.txt') as myfile:
... print(myfile.read())
...
b'Hsoub Wiki.\n'
انظر أيضًا
- التابع
ZipFile.close()
: يغلق التابع ملف الأرشيف.