Запис у текстовий файл
Щоб відкрити текстовий файл на запис, необхідно застосувати режим 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