الفرق بين المراجعتين ل"Python/ZipFile/open"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:التابع <code>ZipFile.open()‎‎</code> في بايثون}}</noinclude> يتيح التابع الوصول إلى عضو في الأر...')
 
سطر 8: سطر 8:
 
ZipFile.open(name, mode='r', pwd=None, *, force_zip64=False)
 
ZipFile.open(name, mode='r', pwd=None, *, force_zip64=False)
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== المعاملات ==
 
== المعاملات ==
‎name
 
اسم الملف المراد الوصول إليه ضمن الأرشيف أو كائن ZipInfo.
 
  
mode
+
=== <code>‎name</code> ===
إن توفّرت قيمة لهذا المعامل فيجب أن تكون 'r' (القيمة الافتراضية) أو 'w'.
+
اسم الملف المراد الوصول إليه ضمن الأرشيف أو كائن [[Python/ZipInfo|<code>ZipInfo</code>]].
  
pwd
+
=== <code>mode</code> ===
كلمة المرور المستخدمة لفك التعمية عن ملفات ZIP المعمّاة.
+
إن توفّرت قيمة لهذا المعامل فيجب أن تكون <code>'r'</code> (القيمة الافتراضية) أو <code>'w'</code>.
  
يمكن للتابع open()‎ أن يدير السياق ما يعني إمكانية استخدامه مع عبارة with:
+
عند استخدام الوضع <code>'r'</code> يكون الكائن الشبيه بالملفات (<code>ZipExtFile</code>) للقراءة فقط ويقدّم التوابع التالية:
  
with ZipFile('spam.zip') as myzip:
+
‎<code>read()</code>, <code>readline()</code>, <code>readlines()</code>, <code>seek()</code>, <code>tell()</code>, <code>__iter__()</code>, <code>__next__()‎</code>.
    with myzip.open('eggs.txt') as myfile:
 
        print(myfile.read())
 
  
عند استخدام الوضع 'r' يكون الكائن الشبيه بالملفات (ZipExtFile) للقراءة فقط ويقدّم التوابع التالية:
+
يمكن لهذه الكائنات أن تعمل بمعزل عن <code>ZipFile</code>.
read(), readline(), readlines(), seek(), tell(), __iter__(), __next__().  
 
  
يمكن لهذه الكائنات أن تعمل بمعزل عن ZipFile.
+
إن أخذ المعامل <code>mode</code> القيمة <code>'w'</code> فإنّ التابع يعيد مقبض ملف قابل للكتابة والذي يدعم التابع <code>write()‎</code>، وعندما يكون مقبض الملف القابل للكتابة مفتوحًا تؤدي محاولة قراءة ملفات ZIP أخرى أو الكتابة فيها إلى إطلاق الاستثناء <code>ValueError</code>.
  
إن أخذ المعامل mode القيمة 'w' فإنّ التابع يعيد مقبض ملف قابل للكتابة والذي يدعم التابع write()‎، وعندما يكون مقبض الملف القابل للكتابة مفتوحًا تؤدي محاولة قراءة ملفات ZIP أخرى أو الكتابة فيها إلى إطلاق الاستثناء ValueError.
+
إن لم يكن حجم الملف المضاف إلى الأرشيف معلومًا مسبقًا ولكنّه قد يتجاوز ‎<code>2 GiB</code> فيستحسن تمرير القيمة <code>force_zip64=True</code> لضمان قدرة صيغة الترويسة على التعامل مع ملفات كبيرة. أما إن كان حجم الملف معروفًا مسبقًا، فيمكن إنشاء كائن <code>[[Python/ZipInfo|ZipInfo]]</code> مع تعيين قيمة للمعامل <code>file_size</code> واستخدام هذا الكائن كقيمة للمعامل <code>name</code>.
  
إن لم يكن حجم الملف المضاف إلى الأرشيف معلومًا مسبقًا ولكنّه قد يتجاوز ‎2 GiB فيستحسن تمرير القيمة force_zip64=True لضمان قدرة صيغة الترويسة على التعامل مع ملفات كبيرة. أما إن كان حجم الملف معروفًا مسبقًا، فيمكن إنشاء كائن ZipInfo مع تعيين قيمة للمعامل file_size واستخدام هذا الكائن كقيمة للمعامل name.
+
=== <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>.
  
 
== أمثلة ==
 
== أمثلة ==
سطر 45: سطر 40:
  
 
<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:36، 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'

انظر أيضًا

مصادر

صفحة Work with ZIP archives في توثيق بايثون الرسمي.