هل لدي طريقة أفضل للكتابة فوق ملف في python-2.7؟

أرغب في الكتابة فوق ملف لتغيير سطر معين. الرمز الوحيد الذي جئت إليه هو كما يلي:

import os

def update(fil, argument, line):
    z = fil.name
    k = fil.readlines()
    k[line] = argument
    m = file.open("test.txt")
    for e in k:
        m.write(str(e))
    os.remove(fil)
    m.name = z

تذهب الوظيفة كما يلي: لدي ثلاثة معلمات:

  • الملف الذي أرغب في استبداله
  • الحجة التي أريد كتابتها
  • السطر الذي تظهر عليه الحجة. </لى>

بعد ذلك ، أقوم بتخزين اسم وخطوط الملف في متغيرين ، z و k ، وأقول أن العنصر (السطر) من k هو الوسيطة. بعد ذلك ، أنشئ ملفًا جديدًا ، وأكتب k فيه ، واحذف الملف الأول ، ثم غيّر اسم الملف الجديد إلى z.

أنا لم مبرمج في بايثون منذ وقت طويل ، لذلك سوف تكون كل مساعدة موضع ترحيب كبير!

0
ليس من الواضح ما الذي تحاول القيام به. هل تحاول الكتابة فوق أحد الملفات أو استبدال سطر واحد فقط في الملف؟
وأضاف المؤلف samfrances, مصدر
أنا triying لاستبدال سطر واحد ، لكنني لم أتمكن من القيام بهذا w/س الكتابة فوق الملف بأكمله. أنا محبط للغاية حول ذلك tbh
وأضاف المؤلف Phazoning, مصدر
البروفيسور فالكين ، أخشى أنني لا أستطيع أن أفعل ذلك ، لأن الاستخدام الذي أعتزم استخدامه هو أن تكون بمثابة ذاكرة لذا ، وبصرف النظر عن بعض العناصر المشتركة ، يجب أن تكون الخطوط مختلفة عن الأخرى. سيرجيه باليستا ، شكرا للطرف ، لم أقم بالبرمجة منذ فترة وأنا خاسرة بعض الشيء ، لذا سوف يستغرق الأمر بعض الوقت بالنسبة لي لتعتاد عليها مرة أخرى
وأضاف المؤلف Phazoning, مصدر
حسنا ، هل يمكن أن الذاكرة خريطة ذلك. لكن الكتابة فوق ملف لتغيير خط هو ممارسة شائعة. "المشكلة" هي أن الملفات لا تعتمد على أي سطر على أي حال ، لذلك لتغيير خط واحد فقط ، يجب أن يكون السطر الجديد بنفس الطول بالضبط.
وأضاف المؤلف Prof. Falken, مصدر
SergeBallesta ، لم أقصد قراءتها في الذاكرة ، كنت أعني خريطة الذاكرة. ولكن بالنسبة إلى الملفات الصغيرة ، أي أقل من ميغابايت ، لا شيء من هذا الأمر ، سيكون سريعًا بغض النظر عما تفعله.
وأضاف المؤلف Prof. Falken, مصدر
وأضاف المؤلف Prof. Falken, مصدر
مجرد ملاحظة ديناصور: لا فائدة من تحميل الملف في الذاكرة. لا تسرّع أي شيء وتهدر الذاكرة فقط.
وأضاف المؤلف Serge Ballesta, مصدر
@ Prof.Falken: كود OP يقوم بتحميل الملف بأكمله في الذاكرة ، عند استدعاء fil.readlines() .
وأضاف المؤلف Serge Ballesta, مصدر