Как прочитать и записать файл в Python
lines = ["первая", "вторая", "третья"]
with open("data.txt", "w", encoding="utf-8") as f:
for line in lines:
f.write(line + "\n")
with open("data.txt", encoding="utf-8") as f:
text = f.read()
print(len(text))
with open("data.txt", encoding="utf-8") as f:
rows = [line.rstrip("\n") for line in f]
print(rows)
with open("data.txt", "a", encoding="utf-8") as f:
f.write("четвёртая\n")
with open("data.txt", encoding="utf-8") as f:
print(f.read().splitlines())21
['первая', 'вторая', 'третья']
['первая', 'вторая', 'третья', 'четвёртая']По порядку: запись списка строк ("w"), чтение целиком (read), чтение по строкам в список, дописывание в конец ("a"), чтение со сразу разрезанными строками (splitlines).
| Режим | Что делает |
|---|---|
"r" | чтение, по умолчанию |
"w" | запись: файл создаётся или очищается |
"a" | дописывание в конец |
"w" очищает файл сразу при открытии. Открыв так файл с нужными данными, их уже не вернуть. Если сомневаетесь, пишите в новый файл или в режиме "a".
Подробно об открытии файлов и with — в уроке Файлы и исключения.
FileNotFoundError: No such file or directory
Файл ищется не рядом с программой, а в текущей папке — той, из которой программа запущена. VS Code, например, запускает программы из открытой в нём папки проекта, и файл рядом с программой во вложенной папке он не найдёт.
Надёжно — строить путь от папки самой программы. __file__ — путь к файлу программы, Path(__file__).parent — его папка:
from pathlib import Path
folder = Path(__file__).parent
path = folder / "data.txt"
path.write_text("Привет\n", encoding="utf-8")
print(path.read_text(encoding="utf-8").strip())
print(path.name)Привет
data.txtЗнак / между папкой и именем склеивает путь правильно для любой системы. Методы write_text и read_text записывают и читают файл целиком одной строкой.
Пути Windows
В обычной строке обратная косая черта начинает спецсимвол: в "C:\new\test.txt" сочетания \n и \t станут переводом строки и табуляцией. Пишите путь с буквой r перед кавычкой — r"C:\new\test.txt" — или через прямую косую: "C:/new/test.txt".
UnicodeDecodeError
UnicodeDecodeError: 'utf-8' codec can't decode byte… — файл записан не в UTF-8. Русский текст из старых программ Windows часто сохранён в кодировке cp1251 — откройте файл с ней:
with open("old.txt", encoding="cp1251") as f:
text = f.read()Обратный случай — ошибка со словом charmap или вместо русских букв непонятные значки: файл в UTF-8, а encoding не указан, и Python в Windows читает его в кодировке системы. Добавьте encoding="utf-8".
Другие частые ошибки
TypeError: write() argument must be str, not int—writeпишет только строки:f.write(str(n) + "\n")илиf.write(f"{n}\n").- Всё записалось в одну строку — забыт
"\n"после каждой строки. - При выводе прочитанных строк между ними появляются пустые строки — в каждой строке остался свой
\n, аprintдобавляет ещё один. Уберите его:line.rstrip("\n")илиline.strip(). PermissionError— файл открыт в другой программе (часто в Excel) или нет прав на папку.