Текстові файли Python
Запис у текстовий файл
Щоб відкрити текстовий файл на запис, необхідно застосувати режим w (перезапис) або a (дозапис). Потім для запису застосовується метод write(str), в який передається записуваний рядок. Варто відзначити, що записується саме рядок, тому, якщо потрібно записати числа чи дані інших типів, то їх слід попередньо конвертувати в рядок.
Запишемо деяку інформацію в файл "hello.txt":
with open("hello.txt", "w") as file:
file.write("hello world")
Якщо ми відкриємо папку, в якій знаходиться поточний скрипт Python, то побачимо там файл hello.txt. Цей файл можна відкрити в будь-якому текстовому редакторі і при бажанні змінити.
Тепер дозапишем в цей файл ще один рядок:
with open("hello.txt", "a") as file:
file.write("\ngood bye, world")
Дозапис виглядає як додавання рядка до останнього символу в файлі, тому, якщо необхідно зробити запис з нового рядка, то можна використовувати ескейп-послідовність "\n". У підсумку файл hello.txt матиме такий вміст:
hello world
good bye, world
Ще один спосіб запису в файл представляє стандартний метод print(), який застосовується для виведення даних на консоль:
with open("hello.txt", "a") as hello_file:
print("Hello, world", file=hello_file)
Для виведення даних у файл в метод print в якості другого параметра передається назва файлу через параметр file. А перший параметр представляє записувану в файл рядок.
Читання файлу
Для читання файлу він відкривається з режимом r (Read), і потім ми можемо прочитати його вміст різними методами:
- readline(): читає один рядок з файлу
- read(): зчитує весь вміст файлу в один рядок
- readlines(): зчитує всі рядки файлу в список
Наприклад, вважаємо вище записаний файл порядково:
with open("hello.txt", "r") as file:
for line in file:
print(line, end="")
Незважаючи на те, що ми явно не застосовуємо метод readline() для читання кожного рядка, але при переборі файлу цей метод автоматично викликається для отримання кожного нового рядка. Тому в циклі вручну немає сенсу викликати метод readline. І оскільки рядки поділяються символом переводу рядка "\n", то щоб виключити зайве перенесення на інший рядок у функцію print передається значення end="".
Тепер явним чином викличемо метод readline() для читання окремих рядків:
with open("hello.txt", "r") as file:
str1 = file.readline()
print(str1, end="")
str2 = file.readline()
print(str2)
Консольний висновок:
good bye, world
Метод readline можна використовувати для построчного зчитування файлу в циклі while:
with open("hello.txt", "r") as file:
line = file.readline()
while line:
print(line, end="")
line = file.readline()
Якщо файл невеликий, то його можна весь прочитати за допомогою методу read():
with open("hello.txt", "r") as file:
content = file.read()
print(content)
І також застосуємо метод readlines() для зчитування всього файлу в список рядків:
with open("hello.txt", "r") as file:
contents = file.readlines()
str1 = contents[0]
str2 = contents[1]
print(str1, end="")
print(str2)
При читанні файлу ми можемо зіткнутися з тим, що його кодування не збігається з ASCII. У цьому випадку ми явно можемо вказати кодування за допомогою параметра encoding:
filename = "hello.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="")
Приклад роботи програми:
Введіть рядок 2: world peace
Введіть рядок 3: great job
Введіть рядок 4: Python
Лічені повідомлення
hello
world peace
great job
Python