سؤال

ولدي الملف التالي:

abcde
kwakwa
<0x1A>
line3
linllll

وأين يمثل <0x1A> بايت مع قيمة ست عشرية من 0x1A. عند محاولة قراءة هذا الملف في بيثون على النحو التالي:

for line in open('t.txt'):
    print line,

ويقرأ فقط السطرين الأولين، ويخرج من الحلقة.

والحل يبدو أن لفتح ملف في ثنائي (أو عالمي وضع سطر جديد) - "م ع" أو "رو". يمكنك تفسير هذا السلوك؟

هل كانت مفيدة؟

المحلول

و0x1A هو على Ctrl-Z، وDOS تستخدم تاريخيا أنه علامة نهاية الملف. على سبيل المثال، حاول استخدام موجه الأوامر، و "نوع" جي الملف. أنه سيتم عرض فقط المحتوى حتى على Ctrl-Z.

وبيثون يستخدم الدالة _wfopen ويندوز CRT، الذي ينفذ "على Ctrl-Z هو EOF" دلالات.

نصائح أخرى

نيد بالطبع صحيح.

إذا يعمل فضولك أعمق قليلا، والسبب الرئيسي هو التوافق اقتيد إلى أقصى الحدود. ويندوز متوافق مع DOS، والتي تستخدم على Ctrl-Z كغاية اختياري من علامة ملف للملفات النصية. ما قد لا يعرفه هو ان DOS كان متوافق مع CP / M، التي كانت شعبية على أجهزة الكمبيوتر الصغيرة قبل PC. لم نظام الملفات CP / M ولا تتبع أحجام الملفات وصولا الى مستوى البايت، وأبقى فقط المسار من قبل عدد من القطاعات الأقراص المرنة. إذا كان الملف لا مضاعف المحدد من 128 بايت، وكنت بحاجة إلى وسيلة للاحتفال نهاية النص. هذه المقالة ويكيبيديا يعني أن اختيار على Ctrl-Z استند إلى اتفاقية حتى كبار السن التي تستخدمها ديسمبر

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top