Якщо для розв’язування задачі під час виконання програми потрібно вводити багато даних або результати роботи програми треба зберегти для подальшого використання, введення/виведення даних зручно здійснювати з використанням текстових файлів.
Файл — це іменована область на диску, яка використовується для постійного зберігання даних.
Зовнішній файл — це сукупність даних, які розташовані на зовнішньому носії.
Текстові файли — це файли, що представлені у вигляді рядків типу str. У мові Python для таких рядків відбувається автоматичне кодування/декодування символів Unicode, а також відповідним чином обробляється символ кінця рядка.
Файл може бути джерелом інформації (під час введення) і приймачем інформації (під час виведення даних). У будь-якому випадку робота з файлом складається з трьох етапів:
Відкриття файлу
Для відкриття файлу користуються вбудованою функцією open():
f = open(<шлях до файлу>, <режим відкриття>)
де f — змінна для збереження файлового об’єкта, який використовується для читання та/або запису у файл.
f = open(<шлях до файлу>, <режим відкриття>)
де f — змінна для збереження файлового об’єкта, який використовується для читання та/або запису у файл.
Ім’я файлу може бути повним або скороченим. Повне ім’я (повний шлях до файлу) в ОС Windows включає:
• назву носія, на якому розміщено файл (диск C:, D: тощо);
• перелік папок від верхнього до нижнього рівня, розділених символом «\». Приклад повного імені: "D:\Моя_папка\myfile.txt".
• назву носія, на якому розміщено файл (диск C:, D: тощо);
• перелік папок від верхнього до нижнього рівня, розділених символом «\». Приклад повного імені: "D:\Моя_папка\myfile.txt".
Якщо файл збережено в одній папці з програмою, достатньо вказати лише ім’я файлу: "myfile.txt".
Файловий об'єкт можна уявити як посередніка між програмою і зовнішнім файлом. Через файловий об'єкт відбувається обмін інформацією між програмою і фізичним файлом, який існує на зовнішньому носії.
Зверни увагу!
Якщо шлях до файлу складається лише з назви файлу, Python буде шукати цей файл у папці, у який міститься програма
Параметр режим відкриття визначає, які дії можна буде виконувати з файлом. Основні режими відкриття такі:
• 'r' — тільки для читання;
• 'w' — тільки для запису. Знищує вміст файлу, якщо файл існує, і створює новий файл для запису, якщо не існує;
• 'а' — для дозапису. Інформація додається в кінець наявного файлу; якщо файл не існує, його буде створено.
• 'r' — тільки для читання;
• 'w' — тільки для запису. Знищує вміст файлу, якщо файл існує, і створює новий файл для запису, якщо не існує;
• 'а' — для дозапису. Інформація додається в кінець наявного файлу; якщо файл не існує, його буде створено.
Читання даних із файлу означає отримання доступу до цих даних.
Функція readline() зчитує із файлу один рядок. Після зчитування елемента (символу або рядка) з файлу поточним (доступним) стає наступний елемент.
f = open('f1.txt')
s=f.readline()
print(s)
s=f.readline()
print(s)
Функція read([n]) зчитує всі дані з файлу, якщо аргумент n відсутній, і зчитує n символів, якщо задано ціле значення n.
Приклад:
У файлі text.txt міститься рядок Привітання від Python!. У консоль виводиться вміст файлу (рис.2).
f = open('text.txt')
print(f.read(1)) # Зчитати 1 символ із файлу
print(f.read()) # Зчитати всі інші символи
f.close()
f = open('text.txt')
print(f.read(1)) # Зчитати 1 символ із файлу
print(f.read()) # Зчитати всі інші символи
f.close()
Рис.2
Приклад:
Якщо файл містить декілька рядків тексту, то можна прочитати файл порядково, скориставшись циклом for:
f = open('numbers.txt')
for line in f: print(line, end = '') # Якщо не вказати атрибут end = '',
f.close() # виводяться зайві порожні рядки
f = open('numbers.txt')
for line in f: print(line, end = '') # Якщо не вказати атрибут end = '',
f.close() # виводяться зайві порожні рядки
Запис у файл можна здійснювати за допомогою функції print(), зазначаючи у списку параметрів, що виведення спрямовується у файл:
print(<список виведення>, file = <файловий об’єкт>)
print(<список виведення>, file = <файловий об’єкт>)
Для того щоб у файлі збереглися зміни, його слід обов’язково закрити, викликавши для файлового об’єкта метод close().
Функція f.close() розриває зв’язок з зовнішнім файлом. При виклику методу close() звільнюються ресурси, які були виділені системою для файлового об’єкту. Приклад:
Запишемо у файл 1 рядок:
f = open("f1.txt", "w")
print("111111", file = f)f = open("f1.txt", "w")
f.close()
Приклад:
Файл f1.txt містить декілька чисел, записаних в окремих рядках.Розглянемо, як зчитати всі числа, знайти їх суму і дозаписати значення суми в кінець файлу (рис. 3).
f = open('f1.txt', 'r')
suma = 0
for i in range(2):
c=f.readline()
suma = suma+int(c)
f.close()
f = open('f1.txt', 'a')
print('сума =', suma, file = f)
f.close()
f = open('f1.txt', 'r')
suma = 0
for i in range(2):
c=f.readline()
suma = suma+int(c)
f.close()
f = open('f1.txt', 'a')
print('сума =', suma, file = f)
f.close()
Рис.3
Діалогові вікна відкриття та збереження файлів
Модуль filedialog надає доступ до діалогових вікон для вибору або задання імені файлу. Для завантаження модуля слід записати команду (для скорочення подальших записів позначимо його fd):
from tkinter import filedialog as fd
from tkinter import filedialog as fd
Функції модуля filedialog: функція fd.askopenfilename() надає діалогове вікно для відкриття файлу (рис.5), функція fd.asksaveasfilename() — вікно для збереження файлу.
Обидві функції повертають назву файлу, але самі вони його не відкривають і не зберігають. Робити це треба описаними вище засобами.
Приклад:
Створимо вікно з кнопками для відкриття і збереження файлу (рис. 4).
from tkinter import*
from tkinter import filedialog as fd
def insertText():
file_name = fd.askopenfilename()
from tkinter import*
from tkinter import filedialog as fd
def insertText():
file_name = fd.askopenfilename()
f = open(file_name)
text.insert(1.0, f.read())
f.close()
def extractText():
def extractText():
file_name = fd.asksaveasfilename()
f = open(file_name, 'w')
f.write(text.get(1.0, END))
f.close()
root = Tk()
text = Text(width = 25, height = 8)
text.pack()
Button(root, text = "Відкрити", command = insertText).pack()
Button(root, text = "Зберегти", command = extractText).pack()
root = Tk()
text = Text(width = 25, height = 8)
text.pack()
Button(root, text = "Відкрити", command = insertText).pack()
Button(root, text = "Зберегти", command = extractText).pack()
Рис.4
Джерела:
Інформатика : підруч. для 8 кл. закл. загал. серед. освіти / [О. О. Бондаренко, . В. Ластовецький, О. П. Пилипчук, Є. А. Шестопалов]. — Харків : Вид-во Ранок», 2021