أسماء ZIP المكررة تجعل اسم الملف وحده وصفا ناقصا للعضو المقصود في الأرشيف. قد يلخص المساعد قائمتين باسم واحد ثم يعامل المحتويين كملف واحد. نراجع دور ZipInfo في مكتبة Python، ونؤلف سجلا لعضوين دون إنشاء أرشيف أو قراءته.
الخلاصة السريعة
حدد عضو الأرشيف، لا الاسم المشترك فقط؛ يتيح zipfile تمرير كائن ZipInfo إلى read أو open، وهو ما يذكره الدليل لحالة الأسماء المكررة. [1]
- يعيد infolist كائن ZipInfo لكل عضو وبترتيب إدخالات الأرشيف الموجود على القرص. [1] لا نحول الاسم المشترك إلى معرف فريد.
- نعلن عضوين باسم notes.txt: الأول نصه «أخضر»، والثاني «أزرق»؛ عدد العضوين 2 رغم أن عدد الأسماء المختلفة 1.
- يقبل read اسما أو ZipInfo ويرجع بايتات العضو. [1] في ورقتنا نختار كائن العضو الثاني صراحة؛ لا نعلن أي عضو اختارته قراءة بالاسم لم ننفذها.
- وجود هوية العضو لا يثبت قراءة محتواه أو سلامته أو صلته بالمهمة؛ احفظ إحالة الأرشيف والعضو ودليل القراءة إن حصل، ولم نفك ضغطا أو نختبر ملفا.
ما الذي تسجله قائمة الأعضاء؟
تعيد infolist في zipfile كائن ZipInfo لكل عضو، بترتيب إدخالات ملف ZIP الفعلي عند فتح أرشيف موجود. وتقبل open وread هذا الكائن، خصوصا عند الأسماء المكررة. [1]
نفرق بذلك بين اسم يظهر في العرض وبين عنصر في قائمة أعضاء. تكرار الاسم لا يخبرنا وحده أن هناك نسخة تالفة أو أن عضوين متطابقان في محتواهما. نحتاج ما يصف كل عنصر.
هذا ليس شرحا لتحديد مرفق في حاوية مساعد أو لعائلة رسالة ومرفقاتها. السؤال هنا عن اختيار عضو داخل أرشيف واحد يسمح المثال فيه بتكرار اسم العضو.
عضوان واسم واحد في ورقة مؤلفة
نعلن أرشيفا رمزيا ز بقائمة من عضوين فقط. نضع للعضو الأول كائنا تعليميا ك 1 ، وللثاني ك 2 ؛ الاسم في الاثنين notes.txt. ونعلن النص «أخضر» للأول و«أزرق» للثاني.
هذه أدوار مؤلفة لا كائنات Python أنشأناها. عدد العناصر في القائمة 2 ، وعدد قيم الاسم المختلفة 1. حذف أحد الصفين لأن الاسم تكرر يفقد إحدى بطاقتي المحتوى اللتين أعلنّاهما.
ولا نسمي الثاني «الأحدث» من موضعه وحده؛ لم نقدم زمن إنشاء أو تحرير. ترتيب القائمة المعلن يرتب العضوين، لكنه لا يمنح كلمة «أزرق» صفة نسخة معتمدة.
| العضو المؤلف | اسمه | النص المعلن |
|---|---|---|
| ك 1 ؛ الأول | notes.txt | أخضر |
| ك 2 ؛ الثاني | notes.txt | أزرق |
كيف نسمي العضو الذي نريد قراءته؟
يسمح read بتمرير اسم أو ZipInfo ويرجع بايتات الملف المسمى أو العضو المحدد. [1]
نعلن في ورقة المهمة أننا نريد ك 2 من قائمة ز، ثم نحيل إلى هذا الكائن في وصف القراءة. وفق البطاقات المقصودة، النص الذي نبحث عنه «أزرق»، لا «أخضر». لا تمثل هذه الجملة نتيجة تنفيذ read.
أما طلب «اقرأ notes.txt» فقط فلا يشرح في ورقتنا أي صف قصده صاحبه. لا نستنتج أن المكتبة قرأت الاثنين أو اختارت الأول؛ لم نجر قراءة بالاسم، ولم نقرأ عقد اختيار تلك الحالة هنا.
ماذا يبقى بعد تحديد العضو؟
نقترح حفظ هوية نسخة الأرشيف وإحالة العضو المحدد وسبب اختياره، ثم مادة القراءة الفعلية إذا قدمت. لا تكفي بطاقة عنوان لملء نص لم يعلن أو يصل.
في أرشيف آخر لا نعرف محتوى العضو من الاسم notes.txt. وحتى عند الوصول إلى بايتاته، تحتاج مهمتنا تفسير النص المقصود ومراجعته؛ لا يثبت الاسم أو اختيار الكائن صحة محتواه أو أنه دليل مستقل.
لم ننشئ ZIP أو نقرأ بايتات أو نفك ضغطا. يبين الرسم أن اسما مشتركا يعود إلى عضوين، وأن إحالة ك 2 تختار واحدا في الورقة. ولا يمنح هذا الشرح ضمان وصول أو سلامة أرشيف.
المصادر ومتابعة القراءة
- Python3.14.8: zipfile (يفتح في نافذة جديدة)docs.python.org
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
