سؤال

على الوثائق الرسمية TemporaryFile ما يلي:

وضع المعلمة الافتراضية 'w+b' حتى أن ملف تم إنشاؤه يمكن قراءة وكتب دون أن تكون مغلقة.

بعد رمز أدناه لا يعمل كما هو متوقع:

import tempfile

def play_with_fd():
    with tempfile.TemporaryFile() as f:
        f.write('test data\n')
        f.write('most test data\n')

        print 'READ:', f.read()

        f.write('further data')

        print 'READ:', f.read()

        f.write('even more')
        print 'READ:', f.read()

        print 'READ:', f.read()
        print 'READ:', f.read()

if __name__ == '__main__':
    play_with_fd()

الإخراج أحصل:

> python play.py 
READ: 
READ: 
READ: 
READ: 
READ: 

أي شخص يمكن أن تفسر هذا السلوك ؟ هل هناك طريقة القراءة من الملفات المؤقتة ؟ (دون الحاجة إلى استخدام مستوى منخفض mkstemp لن تلقائيا حذف الملفات ؛ و أنا لا يهمني اسمه الملفات)

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

المحلول

يجب وضع

f.seek(0)

قبل محاولة قراءة الملف (هذا سوف نرسل لك إلى بداية الملف) ،

f.seek(0, 2)

العودة إلى النهاية لذلك يمكنك أن أؤكد أنك لن الكتابة فوقه.

نصائح أخرى

read() لا يعود أي شيء لأنك في نهاية الملف.تحتاج إلى استدعاء seek() أولا قبل read() لن يعود أي شيء.على سبيل المثال ، وضعت هذا الخط أمام أول read():

f.seek(-10, 1)

طبعا قبل كتابة مرة أخرى ، تأكد من seek() إلى نهاية (إذا كان هذا هو المكان الذي كنت ترغب في الاستمرار في الكتابة).

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