الفرق بين المراجعتين لصفحة: «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()
: يغلق التابع ملف الأرشيف.