Python · Синтаксис · Початковий рівень

Робота з файлами: читання та запис

10 завдань

Практичні вправи щодо роботи з файлами в Python: читання тексту, запис рядків, додавання даних, підрахунок рядків і слів, обробка вмісту файлу та створення простих звітів.

Відкриття і читання файлів

#
Файл у Python відкривається за допомогою open(), яка повертає файловий об'єкт. Перший аргумент — ім'я файлу, другий — режим, а кодування слід майже завжди вказувати явно. ```python file = open("note.txt", "r", encoding="utf-8") content = file.read() file.close() print(content) ``` "r" — режим читання, файл має вже існувати. read() завантажує весь вміст файлу як один рядок. close() звільняє файловий дескриптор. Забути close — це витік ресурсів. Оператор with обробляє закриття автоматично, навіть якщо виникне виняток: ```python with open("note.txt", "r", encoding="utf-8") as file: content = file.read() print(content) ``` Після виходу з блоку with файл закривається. Це стандартний патерн — завжди використовуйте with. readlines() дає список рядків, кожен із символом нового рядка в кінці: ```python with open("tasks.txt", "r", encoding="utf-8") as file: lines = file.readlines() print(len(lines)) # кількість рядків for line in lines: print(line.strip()) # strip() видаляє завершальний ``` Ітерування безпосередньо по файловому об'єкту також працює і є ефективним по пам'яті для великих файлів: ```python with open("tasks.txt", "r", encoding="utf-8") as file: for line in file: print(line.strip()) ```

Запис і дозапис

#
Запис у файл використовує режим "w". Якщо файл не існує — Python його створює. Якщо він вже існує — "w" повністю перезаписує його, попередній вміст зникає. ```python with open("message.txt", "w", encoding="utf-8") as file: file.write("Hello, file!") ``` write() не додає новий рядок автоматично. Щоб записати кілька рядків, включайте \n явно або використовуйте writelines() зі списком рядків, що вже закінчуються на \n: ```python products = ["bread", "milk", "cheese"] with open("shopping.txt", "w", encoding="utf-8") as file: for item in products: file.write(item + "\n") ``` Дозапис за допомогою "a" додає вміст у кінець файлу, не стираючи те, що вже є: ```python with open("log.txt", "a", encoding="utf-8") as file: file.write("New entry\n") ``` Використовуйте "a" для журналів, "w" для файлів, які генеруєте щоразу заново. Вибір має значення: "w" для журналу знищить всі попередні записи. Щоб прочитати файл, змінити вміст і записати назад: ```python with open("text.txt", "r", encoding="utf-8") as file: content = file.read() with open("text.txt", "w", encoding="utf-8") as file: file.write(content.upper()) ``` Два окремих блоки with — один для читання, інший для запису. Відкриття одного файлу одночасно для "r" і "w" може спричинити проблеми залежно від ОС.

Патерни обробки файлів

#
Створення файлу з початковим вмістом і читання його назад — багато завдань слідують цій двокроковій формі: ```python with open("words.txt", "w", encoding="utf-8") as file: file.write("code python file student") with open("words.txt", "r", encoding="utf-8") as file: content = file.read() words = content.split() longest = max(words, key=len) print(longest) ``` max(iterable, key=function) знаходить елемент, для якого функція повертає найбільше значення. max(words, key=len) знаходить найдовше слово без написання циклу. Фільтрація рядків і запис їх у новий файл: ```python with open("emails.txt", "r", encoding="utf-8") as file: lines = file.readlines() with open("valid_emails.txt", "w", encoding="utf-8") as file: for line in lines: if "@" in line: file.write(line) ``` Запис обчисленого звіту в окремий файл: ```python with open("article.txt", "r", encoding="utf-8") as file: content = file.read() word_count = len(content.split()) with open("report.txt", "w", encoding="utf-8") as file: file.write(f"Word count: {word_count}\n") ``` Числа та інші нерядкові значення потрібно перетворювати в рядки перед записом. F-рядки роблять це автоматично. Передача цілого числа безпосередньо у write() викликає TypeError.

Швидкий довідник: операції з файлами

#
**Режими файлу** | Режим | Значення | Якщо файл існує | Якщо файл відсутній | |---|---|---|---| | `'r'` | читання | відкривається | `FileNotFoundError` | | `'w'` | запис | **перезаписує** | створює новий | | `'a'` | додавання | додає в кінець | створює новий | | `'r+'` | читання + запис | відкривається | `FileNotFoundError` | Завжди додавайте `encoding='utf-8'` щоб уникнути платформо-залежних проблем. **Стандартний патерн — завжди використовувати `with`** ```python with open('file.txt', 'r', encoding='utf-8') as f: content = f.read() # весь файл як один рядок with open('file.txt', 'w', encoding='utf-8') as f: f.write('текст\n') # write() не додає перенос рядка автоматично ``` **Методи читання** | Метод | Повертає | Використовувати коли… | |---|---|---| | `f.read()` | весь файл як `str` | невеликі файли, потрібен весь вміст | | `f.readline()` | один рядок з `\n` | читання по одному рядку | | `f.readlines()` | список рядків з `\n` | потрібні всі рядки як список | | `for line in f:` | один рядок за ітерацію | великі файли, ефективно по пам'яті | **Методи запису** ```python f.write('текст') # записати рядок (без авто-переносу) f.write('рядок\n') # додати \n явно f.writelines(['a\n', 'b\n']) # записати список — переноси не додаються ``` **Типові патерни** ```python # Прочитати всі рядки, прибрати пробіли with open('f.txt', 'r', encoding='utf-8') as f: lines = [line.strip() for line in f] # Записати список елементів, по одному на рядок with open('f.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(items)) # Прочитати, перетворити, записати назад with open('f.txt', 'r', encoding='utf-8') as f: text = f.read() with open('f.txt', 'w', encoding='utf-8') as f: f.write(text.upper()) # Додати запис в лог with open('log.txt', 'a', encoding='utf-8') as f: f.write(f'запис\n') ``` **Типові помилки** ```python f.write(42) # TypeError — має бути str, використовуйте str(42) open('f.txt', 'w') # 'w' одразу стирає наявний вміст # забути encoding= спричиняє помилки з не-ASCII текстом ```
01

Прочитати весь файл.

#

Створіть файл note.txt з текстом "Python files". Потім відкрийте цей файл для читання, прочитайте весь вміст і виведіть його в термінал.

file_name = "note.txt"
Рішення
file_name = "note.txt"

with open(file_name, "w", encoding="utf-8") as file:
    file.write("Python files")

with open(file_name, "r", encoding="utf-8") as file:
    text = file.read()

print(text)
02

Записати рядок у файл.

#

Користувач вводить один рядок. Запишіть цей рядок у файл message.txt, потім прочитайте файл і виведіть його вміст.

text = input("Введіть повідомлення: ")
file_name = "message.txt"

Рішення
text = input("Введіть повідомлення: ")
file_name = "message.txt"

with open(file_name, "w", encoding="utf-8") as file:
    file.write(text)

with open(file_name, "r", encoding="utf-8") as file:
    result = file.read()

print(result)
03

Додати рядок у кінець файлу.

#

У файлі log.txt вже є рядок "Start". Користувач вводить новий рядок. Додайте його в кінець файлу з нового рядка і виведіть підсумковий вміст файлу.

file_name = "log.txt"

with open(file_name, "w", encoding="utf-8") as file:
    file.write("Start")

new_line = input("Новий рядок: ")
Рішення
file_name = "log.txt"

with open(file_name, "w", encoding="utf-8") as file:
    file.write("Start")

new_line = input("Новий рядок: ")

with open(file_name, "a", encoding="utf-8") as file:
    file.write("\n" + new_line)

with open(file_name, "r", encoding="utf-8") as file:
    text = file.read()

print(text)
04

Порахувати рядки у файлі.

#

Створіть файл tasks.txt з трьома рядками: "Learn", "Practice", "Repeat". Прочитайте файл і виведіть кількість рядків.

file_name = "tasks.txt"

Рішення
file_name = "tasks.txt"

with open(file_name, "w", encoding="utf-8") as file:
    file.write("Learn\nPractice\nRepeat")

with open(file_name, "r", encoding="utf-8") as file:
    lines = file.readlines()

print("Кількість рядків:", len(lines))

# або так можна: рахувати рядки в циклі
file_name = "note.txt"
count = 0

with open(file_name, "r", encoding="utf-8") as file:
    for line in file:
        count += 1

print(count)
05

Знайти найдовше слово.

#

Створіть файл words.txt зі словами через пробіл: "code python file student". Прочитайте файл і виведіть найдовше слово.

file_name = "words.txt"

Рішення
file_name = "words.txt"

with open(file_name, "w", encoding="utf-8") as file:
    file.write("code python file student")

with open(file_name, "r", encoding="utf-8") as file:
    text = file.read()

words = text.split()
longest = words[0]

for word in words:
    if len(word) > len(longest):
        longest = word

print(longest)
06

Записати список покупок.

#

Є список покупок: ["хліб", "молоко", "сир"]. Запишіть кожен елемент списку у файл shopping.txt з нового рядка. Потім прочитайте файл і виведіть його вміст.

products = ["хліб", "молоко", "сир"]
file_name = "shopping.txt"

Рішення
products = ["хліб", "молоко", "сир"]
file_name = "shopping.txt"

with open(file_name, "w", encoding="utf-8") as file:
    for product in products:
        file.write(product + "\n")

with open(file_name, "r", encoding="utf-8") as file:
    text = file.read()

print(text)
07

Сума чисел із файлу.

#

Створіть файл numbers.txt, де числа записані через пробіл: 5 10 15 20. Прочитайте файл, порахуйте суму чисел і виведіть результат.

file_name = "numbers.txt"
Рішення
file_name = "numbers.txt"

with open(file_name, "w", encoding="utf-8") as file:
    file.write("5 10 15 20")

with open(file_name, "r", encoding="utf-8") as file:
    text = file.read()

numbers = text.split()
total = 0

for number in numbers:
    total += int(number)

print("Сума:", total)
08

Фільтр рядків за символом.

#

Створіть файл emails.txt з кількома рядками, частина з яких містить символ @. Прочитайте файл і запишіть лише рядки з @ у новий файл valid_emails.txt. Потім виведіть вміст нового файлу.

file_name = "emails.txt"
result_file = "valid_emails.txt"

Рішення
file_name = "emails.txt"
result_file = "valid_emails.txt"

with open(file_name, "w", encoding="utf-8") as file:
    file.write("[email protected]\nhello\[email protected]\ntest")

with open(file_name, "r", encoding="utf-8") as file:
    lines = file.readlines()

with open(result_file, "w", encoding="utf-8") as file:
    for line in lines:
        if "@" in line:
            file.write(line)

with open(result_file, "r", encoding="utf-8") as file:
    text = file.read()

print(text)
09

Перезаписати файл у верхньому регістрі.

#

Створіть файл text.txt з рядком "hello file". Прочитайте вміст, переведіть його у верхній регістр і перезапишіть цей самий файл новим текстом. Потім виведіть підсумковий вміст.

file_name = "text.txt"

Рішення
file_name = "text.txt"

with open(file_name, "w", encoding="utf-8") as file:
    file.write("hello file")

with open(file_name, "r", encoding="utf-8") as file:
    text = file.read()

text = text.upper()

with open(file_name, "w", encoding="utf-8") as file:
    file.write(text)

with open(file_name, "r", encoding="utf-8") as file:
    result = file.read()

print(result)
10

Звіт із кількістю слів.

#

Створіть файл article.txt з кількома словами. Прочитайте файл, порахуйте кількість слів і запишіть у файл report.txt рядок виду "Кількість слів: N". Потім виведіть вміст report.txt.

article_file = "article.txt"
report_file = "report.txt"

Рішення
article_file = "article.txt"
report_file = "report.txt"

with open(article_file, "w", encoding="utf-8") as file:
    file.write("Python helps practice file reading and writing")

with open(article_file, "r", encoding="utf-8") as file:
    text = file.read()

words = text.split()
count = len(words)

with open(report_file, "w", encoding="utf-8") as file:
    file.write(f"Кількість слів: {count}")

with open(report_file, "r", encoding="utf-8") as file:
    result = file.read()

print(result)