حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش کار با فایل در پایتون؛ CSV، JSON و گزارش‌گیری

رفع باگ append در پایتون؛ نگهداری متن قبلی فایل

فایل متنی در پایتون؛ خواندن، نوشتن و متن فارسی · 0٪

✍️ برای ثبت رویدادهای پشت سر هم، معمولاً نمی‌خواهیم یادداشت قبلی پاک شود. حالت a نوشتن تازه را به انتهای فایل می‌فرستد. این حالت خودش نویسه پایان خط اضافه نمی‌کند؛ اگر هر رویداد باید یک خط باشد، اضافه کردن \n هم مسئولیت کد ماست. در این تمرین دقیقاً یک پایان خط پس از متن تازه می‌نویسیم.

مثلاً متن اولیه «شروع» به‌همراه پایان خط است و رویداد تازه «پایان» است؛ نتیجه دو خط می‌شود. اگر متن اولیه پایان خط نداشته باشد، طبق قرارداد همین تمرین متن تازه بلافاصله پس از آن می‌آید. قرار نیست یک جداکننده پنهان اختراع کنیم. متن رویداد خودش پایان خط ندارد، ولی می‌تواند خالی باشد.

کد اولیه فایل نمونه را درست می‌سازد، اما برای مرحله بعد حالت اشتباهی انتخاب کرده و متن قدیمی را از بین می‌برد. آن را اصلاح کن و نتیجه را از فایل بخوان. خطای رایج دیگر، برگرداندن فقط تعداد نویسه‌های نوشته‌شده است؛ write یک عدد برمی‌گرداند، ولی خروجی مورد انتظار ما متن کامل فایل است. تمام این کارها باید داخل همان پوشه موقت انجام شود تا آزمون بعدی به این اجرا وابسته نباشد.

در این تمرین پایان خط‌های احتمالی ورودی فقط LF یعنی \n، مثل مثال‌ها، هستند؛ ورودی با \r یا \r\n داده نمی‌شود.

فعالیت شما

تابع append_line(initial,line) دو رشته می‌گیرد؛ line پایان خط داخلی ندارد. فایل موقت را با initial بساز، با حالت a متن line+'\n' را دقیقاً به انتها اضافه کن و متن کامل خوانده‌شده را بده. جداکننده دیگری اضافه نکن؛ append_line('الف\n','ب')='الف\nب\n'. initial یا line خالی هم معتبرند. در این تمرین پایان خط‌های احتمالی ورودی فقط LF یعنی \n، مثل مثال‌ها، هستند؛ ورودی با \r یا \r\n داده نمی‌شود.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

import tempfile
from pathlib import Path

def append_line(initial, line):
    with tempfile.TemporaryDirectory() as folder:
        path = Path(folder) / 'events.txt'
        path.write_text(initial, encoding='utf-8')
        with open(path, 'w', encoding='utf-8') as file:
            file.write(line + '\n')
        return path.read_text(encoding='utf-8')