В этом практическом уроке, мы рассмотрим работу с текстовыми файлами в Python. Для работы с текстовыми файлами, нам нужно использовать по сути всего две функции.
Запись в текстовый файл
В открытие и закрытие файлов, мы уже обсуждали режимы открытия файлов. Для того что бы открыть текстовый файл а запись, нам необходимо использовать либо режим перезаписи w (Write), либо режим дозаписи a (Append). Разберем несколько простых примеров.
Запишем «hello world» в наш файл test.txt
with open("test.txt", "w") as file:
file.write("hello world")
Теперь если мы откроем наш файл, который лежит рядом со скриптом (если файла не было изначально, он будет создан), то увидим там запись «hello world».
Теперь разберем режим дозаписи, попробуем в этот же файл дописать новую строку.
with open("test.txt", "a") as file:
file.write("\python the best")
Я думаю вы сразу заметили символ слеша, перед началом строки. По сути, дозапись строки, означает запись после последнего символа, и что бы у нас не было слитного текста, мы используем «\n», ниже показано, как наш файл будет выглядеть с этим символом, и как без него.
hello world
python the best
\n используем
hello worldpython the best
\n не используем
Чтение файла
Для чтения файла мы открываем его в режиме чтения r (Read). Далее, после открытия, мы можем использовать несколько вариантов чтения.
- readline() — чтение одной строки
- read() — чтение всего содержимого в одну строку
- readlines() — построчное считывание в список
В качестве примера будем использовать наш ранее записанный файл, попробуем считать данные из нее.
with open("test.txt", "r") as file:
for line in file:
print(line, end="")
Мы используем цикл for, и перебираем каждую строку, в таком случае нам не нужно явно указывать, что мы применяем метод readline(). Так как между строками у нас символ перевода на новую строку «\n», то, что бы у нас не было случайного лишнего переноса на новую строку, в print передаем параметр end=»».
Явный вызов метода readline() выглядит следующим образом:
with open("test.txt", "r") as file:
str1 = file.readline()
print(str1, end="")
str2 = file.readline()
print(str2)
Результат:
hello world
Python the best
Так же метод readline(), отлично подойдет для построчного считывания при использовании цикла while.
with open("test.txt", "r") as file:
line = file.readline()
while line:
print(line, end="")
line = file.readline()
В принципе, на примере readline() уже понятно логика работы остальных методов, если файл небольшой то, считать можно используя метод read(), если нужно получить список строк, то используем readlines(), ниже приведен пример.
with open("test.txt", "r") as file:
liners = file.readlines()
str1 = liners[0]
str2 = liners[1]
print(str1, end="")
print(str2)
Иногда, при чтении файла у нас могут возникнуть проблемы с кодировкой, в этом случае мы можем явно указать кодировку с применением параметра encoding.
filename = "test.txt"
with open(filename, encoding="utf8") as file:
text = file.read()
Теперь напишем небольшую программу, которая записывает, и считывает записанные данные. Для более лучшего понимания, вам необходимо хорошо разобраться со следующими темами.
# имя файла
FILENAME = "messages.txt"
# определяем пустой список
messages = list()
for i in range(4):
message = input("Введите строку " + str(i+1) + ": ")
messages.append(message + "\n")
# запись списка в файл
with open(FILENAME, "a") as file:
for message in messages:
file.write(message)
# считываем сообщения из файла
print("Считанные сообщения")
with open(FILENAME, "r") as file:
for message in file:
print(message, end="")
Результат выполнения скрипта:
Результат выполнения скрипта:
Введите строку 1: hello
Введите строку 2: world peace
Введите строку 3: great job
Введите строку 4: Python
Считанные сообщения
hello
world peace
great job
Python