Тема, шрифт, мова та інші налаштування інтерфейсу.
Статистика використання. Вимкнена, доки ви її не дозволите.
Реклама та вимірювання реклами. Вимкнені, доки ви їх не дозволите.
ПРО САЙТ
Усі відкриті вкладки сайту
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 текстом
```
Створіть файл 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)
Користувач вводить один рядок.
Запишіть цей рядок у файл 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)
У файлі 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)
Створіть файл 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)
Створіть файл 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)
Є список покупок: ["хліб", "молоко", "сир"].
Запишіть кожен елемент списку у файл 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)
Створіть файл 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)
Створіть файл emails.txt з кількома рядками, частина з яких містить символ @.
Прочитайте файл і запишіть лише рядки з @ у новий файл 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)
Створіть файл 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)
Створіть файл article.txt з кількома словами.
Прочитайте файл, порахуйте кількість слів і запишіть у файл report.txt рядок виду "Кількість слів: N". Потім виведіть вміст 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)
No split tab
Налаштування cookies
Ми використовуємо необхідні cookies для роботи сайту. З вашого дозволу ми також можемо зберігати налаштування сайту та використовувати аналітичні й рекламні cookies, щоб розуміти використання сайту й підтримувати розвиток проєкту.
* Ви завжди можете змінити свій вибір у налаштуваннях сайту.
Оберіть категорії cookies
Налаштування аналітики
Можна вимкнути аналітику використання платформи. Також можна надіслати в Google Analytics запит на видалення даних про використання цього сайту, пов'язаних із цим браузером.
Навчальний workspace
Навчайтеся, читаючи, запускаючи код і розв'язуючи задачі.
Практикуйте програмування з поясненнями тем, вправами, інструментами browser IDE, перевіркою regex і тренуванням друку коду в одному workspace.
Відкривайте інструменти у вкладках.Вправи, IDE-інструменти й тренажери залишаються доступними як вкладки сайту.
Перемикайтеся без втрати контексту.Переходьте між поясненнями, кодом та утилітами, зберігаючи своє місце.
Використовуйте sidebar як карту.Ліві панелі містять навігацію, налаштування, файли, libraries та керування інструментами.
PythonJavaScriptSQLite
Одна IDE, три практичні режими
Python у браузері.Запускайте невеликі скрипти, пробуйте бібліотеки й тренуйте API-запити без встановлення.
JavaScript для швидких експериментів.Перевіряйте код для браузера й порівнюйте ідеї поруч із навчальними матеріалами.
SQLite для практики з даними.Відкривайте оглядач бази даних, переглядайте таблиці, пишіть запити й вивчайте SQL локально.
ТемаIDE
Працюйте поруч у split tabs
Тримайте інструкції перед очима.Відкрийте вправу або довідкову сторінку поруч з IDE, замість постійних перемикань.
Порівнюйте інструменти під час навчання.Розміщуйте перевірки regex, пояснення та експерименти з кодом поруч, коли це потрібно для задачі.
Закрийте split, коли завершите.Workspace повернеться до однієї сфокусованої вкладки, а відкриті вкладки сайту залишаться доступними.
Тренажер друку коду
Або звичайного тексту
Тренажер розрахований на фізичну клавіатуру.Відкрийте цей розділ на ноутбуці або комп'ютері з широким екраном. На телефоні тренування друку не працюватиме коректно.
Швидкість: 0 зн/хв
0 слів/хв
Найкраща швидкість (60с): 0 зн/хв
0 слів/хв
Помилки: 0
Загальний час: 0.0 с
Щоб тренувати сліпий друк, не підглядайте на фізичну клавіатуру.