اذهب إلى المحتوى
  • 0

كيف أبحث وأستبدل سطر في ملف في بايثون؟

TheProgrammer

السؤال

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

أسهل طريقة لفعل ذلك هي عن طريق استخدام وحدة fileinput، فعلى سبيل المثال هذه الشيفرة البرمجية لإضافة رقم كل سطر في الملف:

import fileinput

for line in fileinput.input("test.txt", inplace=True):
    print "%d: %s" % (fileinput.filelineno(), line),

شرح ما الذي ستفعله هذه الشيفرة البرمجية:

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

المصدر

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

التعديل على الملفات يجب أن يكون دقيقًا. هنا سأعرّف التابع التالي الذي يمكّنك من إنجاز المطلوب:

from tempfile import mkstemp
from shutil import move, copymode
from os import fdopen, remove
# نمرر المسار والسطر المراد استبداله و السطر الجديد
def replace(file_path, pattern, subst):
    # ننشئ ملف مؤقت
    fh, abs_path = mkstemp()
    with fdopen(fh,'w') as new_file:
        with open(file_path) as old_file:
            # نمر على أسطر الملف القديم
            for line in old_file:
                # نكتب في الملف الجديد هذا السطر + استبدال السطر القديم بالجديد عندما نجده
                new_file.write(line.replace(pattern, subst))
    # ننسخ أذونات الملف من الملف القديم إلى الملف الجديد
    copymode(file_path, abs_path)
    # نحذف الملف القديم
    remove(file_path)
    # ننتقل للملف الجديد
    move(abs_path, file_path)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...