Статистика использования. Отключена, пока вы её не разрешите.
Реклама и измерение рекламы. Отключены, пока вы их не разрешите.
О САЙТЕ
Все открытые вкладки сайта
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 с
Для активации режима слепого набора не подсматривайте на физическую клавиатуру.