الفرق بين المراجعتين لصفحة: «Python/ZipFile/open»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:التابع <code>ZipFile.open()</code> في بايثون}}</noinclude> يتيح التابع الوصول إلى عضو في الأر...' |
|||
| (1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
| سطر 8: | سطر 8: | ||
ZipFile.open(name, mode='r', pwd=None, *, force_zip64=False) | ZipFile.open(name, mode='r', pwd=None, *, force_zip64=False) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== المعاملات == | == المعاملات == | ||
=== <code>name</code> === | |||
اسم الملف المراد الوصول إليه ضمن الأرشيف أو كائن [[Python/ZipInfo|<code>ZipInfo</code>]]. | |||
=== <code>mode</code> === | |||
إن توفّرت قيمة لهذا المعامل فيجب أن تكون <code>'r'</code> (القيمة الافتراضية) أو <code>'w'</code>. | |||
عند استخدام الوضع <code>'r'</code> يكون الكائن الشبيه بالملفات (<code>ZipExtFile</code>) للقراءة فقط ويقدّم التوابع التالية: | |||
<code>read()</code>, <code>readline()</code>, <code>readlines()</code>, <code>seek()</code>, <code>tell()</code>, <code>__iter__()</code>, <code>__next__()</code>. | |||
يمكن لهذه الكائنات أن تعمل بمعزل عن <code>ZipFile</code>. | |||
إن أخذ المعامل <code>mode</code> القيمة <code>'w'</code> فإنّ التابع يعيد مقبض ملف قابل للكتابة والذي يدعم التابع <code>write()</code>، وعندما يكون مقبض الملف القابل للكتابة مفتوحًا تؤدي محاولة قراءة ملفات ZIP أخرى أو الكتابة فيها إلى إطلاق الاستثناء <code>ValueError</code>. | |||
إن | إن لم يكن حجم الملف المضاف إلى الأرشيف معلومًا مسبقًا ولكنّه قد يتجاوز <code>2 GiB</code> فيستحسن تمرير القيمة <code>force_zip64=True</code> لضمان قدرة صيغة الترويسة على التعامل مع ملفات كبيرة. أما إن كان حجم الملف معروفًا مسبقًا، فيمكن إنشاء كائن <code>[[Python/ZipInfo|ZipInfo]]</code> مع تعيين قيمة للمعامل <code>file_size</code> واستخدام هذا الكائن كقيمة للمعامل <code>name</code>. | ||
=== <code>pwd</code> === | |||
كلمة المرور المستخدمة لفك التعمية عن ملفات ZIP المعمّاة. | |||
ملاحظات | '''ملاحظات:''' | ||
* يمكن للتوابع open() و read() و extract() أن تتعامل مع أسماء الملفات أو مع كائنات ZipInfo. تظهر فائدة هذا الأمر عند القراءة من ملفات ZIP تحتوي على ملفات ZIP ذات أسماء مكرّرة. | * يمكن للتوابع <code>open()</code> و <code>read()</code> و <code>extract()</code> أن تتعامل مع أسماء الملفات أو مع كائنات <code>[[Python/ZipInfo|ZipInfo]]</code>. تظهر فائدة هذا الأمر عند القراءة من ملفات ZIP تحتوي على ملفات ZIP ذات أسماء مكرّرة. | ||
* لم تعد الدالة البانية تدعم الوضع 'U' في الإصدار 3.6 من اللغة، ويمكن استخدام الكائن io.TextIOWrapper لقراءة الملفات النصية المضغوطة في وضع universial newlines. | * لم تعد الدالة البانية تدعم الوضع <code>'U'</code> في الإصدار 3.6 من اللغة، ويمكن استخدام الكائن <code>io.TextIOWrapper</code> لقراءة الملفات النصية المضغوطة في وضع universial newlines. | ||
* يمكن استخدام التابع open() لكتابة الملفات إلى ملف الأرشيف باستخدام القيمة 'w' للمعامل mode في الإصدار 3.6 من بايثون. | * يمكن استخدام التابع <code>open()</code> لكتابة الملفات إلى ملف الأرشيف باستخدام القيمة <code>'w'</code> للمعامل <code>mode</code> في الإصدار 3.6 من بايثون. | ||
* يؤدي استدعاء التابع open() على كائن ZipFile مغلق إلى إطلاق الاستثناء ValueError في الإصدار 3.6 من بايثون. أما في الإصدارات السابقة فكان التابع يُطلق الاستثناء RuntimeError. | * يؤدي استدعاء التابع <code>open()</code> على كائن <code>[[Python/ZipFile|ZipFile]]</code> مغلق إلى إطلاق الاستثناء <code>ValueError</code> في الإصدار 3.6 من بايثون. أما في الإصدارات السابقة فكان التابع يُطلق الاستثناء <code>RuntimeError</code>. | ||
== أمثلة == | == أمثلة == | ||
يبين المثال التالي | يبين المثال التالي طريقة استخدام التابع لفتح أحد الملفات المضغوطة في الأرشيف: | ||
<syntaxhighlight lang="python3"> | <syntaxhighlight lang="python3"> | ||
>>> import zipfile | |||
>>> zip = zipfile.ZipFile('files.zip') | |||
>>> file = zip.open('file1.txt') | |||
>>> file.read() | |||
b'Hsoub Wiki.\n' | |||
</syntaxhighlight>يمكن للتابع <code>open()</code> أن يدير السياق ما يعني إمكانية استخدامه مع عبارة <code>with</code>:<syntaxhighlight lang="python3"> | |||
>>> with zipfile.ZipFile('files.zip') as myzip: | |||
... with myzip.open('file1.txt') as myfile: | |||
... print(myfile.read()) | |||
... | |||
b'Hsoub Wiki.\n' | |||
</syntaxhighlight> | </syntaxhighlight> | ||
المراجعة الحالية بتاريخ 07:38، 16 نوفمبر 2018
يتيح التابع الوصول إلى عضو في الأرشيف ككائن ثنائي شبيه بالملفات.
البنية العامة
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(): يغلق التابع ملف الأرشيف.