تقنية

copyfileobj في بايثون: هل يبدأ النسخ من أول المصدر؟

النسخ يبدأ بعد bud عند الموضع 3
قبل النسخ. [1] [2]

حدد موضع المصدر قبل النسخ. [1] [2]

الخلاصة السريعة

لا؛ يبدأ copyfileobj من الموضع الحالي في مثالنا. [1] [2]

  • المصدر budleaf داخل BytesIO. [1] [2]
  • seek(3) يتجاوز بايتات bud. [1] [2]
  • الوجهة الفارغة تستقبل b'leaf'. [1] [2]
  • موضع المصدر يصبح 7، والوجهة 4. [1] [2]
  • اختبرنا 3.12.14 في الذاكرة؛ دون ملفات. [1] [2]

المثال

from io import BytesIO
from shutil import copyfileobj
src=BytesIO(b"budleaf")
src.seek(3)
dst=BytesIO()
copyfileobj(src,dst)
print(dst.getvalue())
print(src.tell())
print(dst.tell())

[1] [2]

لا إعادة تلقائية للبداية

المصدر يقرأ من الكائن الحالي ثم يكتب ما قرأه في الوجهة؛ لا ينفذ seek(0) قبل الحلقة. موضع القراءة يؤثر في البايتات المنسوخة. [1] [2]

الوجهة تحتوي leaf وموضعها 4
بعد النسخ. [1] [2]

الضبط المقابل

عندما جعلنا الموضع 0 في مصدر مماثل ووجهة فارغة جديدة، حصلنا على b'budleaf' وموضعي 7 و7. حجم الدفعة لا يعيد البادئة المتجاوزة. هذا مثال كائنات بايتات في الذاكرة؛ لا نقيس أداء الأقراص أو حفظ البيانات الوصفية. [1] [2]

المراجع

  1. Python 3.12: copying file-like objects
  2. CPython 3.12.14: copyfileobj loop
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.