Робота з файлами в Python: функції читання, запис у файл
Давайте детально розберемо, як за допомогою Python відбувається відкриття, читання та запис даних у файл. Для кращого розуміння стаття супроводжується фрагментами коду.
Будь-яка програма, написана мовою Python, має не тільки функціональну частину. Вона також оптимізована для роботи з файлами. Наприклад, при написанні бота, що автоматично відповідає на запити користувача, доведеться додати до нього заздалегідь підготовлені відповіді в окремому текстовому документі. Розробляєте програму для редагування зображень? Тоді код повинен обробляти файли, завантажені користувачем. Щоб усе це реалізувати, ви повинні знати, як працювати з файлами мовою Python, і які для цього потрібні функції.
Пристрій, що працює на базі операційної системи, має файли. Це набір даних з власною назвою, який зберігається на цьому пристрої або комп’ютері. Декілька файлових об’єктів для зручності або класифікації зберігають у папках або директоріях. У Python, як і в інших мовах програмування, файли використовуються для збереження результатів роботи програми або отримання даних для подальшої кодової обробки.
При роботі з файлами ви будете часто використовувати команди:
Тепер настав час пояснити, як все це робити.
Щоб відкрити файл в Python застосовується функція open(). Нижче ви бачите фрагмент коду, який пояснює цю команду:
file = open('doc.txt', 'r') # 'r'
Наприкінці рядка коду можна побачити аргумент # ‘r’. Його присутність означає, що документ відкритий лише для читання. При необхідності можна змінити цей аргумент, додавши замість нього ‘w’. Це означає, що файл доступний не тільки для читання, а й для запису.
Характерною особливістю синтаксису Python є те, що після відкриття та роботи з файлом його доводиться закривати командою file.close(). Закриття можна автоматизувати за допомогою контекстного менеджера with:
with open(doc.txt', 'r') as file: content = file.read() print(content)
У цьому фрагменті ми бачимо наявність контекстного менеджера, який сам закриває файл після завершення роботи. Автоматичне закриття запобігає можливим помилкам.
Під час написання команди відкриття файлу ви можете вказати його кодування:
with open('doc.txt', 'w+', encoding='Windows-1251') as f:
Також ви можете вказати кодування при звичайному відкритті файлу без автоматичного закриття:
f = open('doc.txt', 'w+', encoding='Windows-1251') тут ми щось робимо f.close()
Читання даних у Python реалізується функцією read(). Перед вами фрагмент коду, який це показує:
file.read(size)
Тут файл показує об’єкт для подальшого читання, а параметр size — скільки символів потрібно прочитати. Якщо параметр не вказувати, користувач зможе прочитати всі дані з цього файлу.
Давайте зараз створимо файл highload.txt і запишемо в нього рядок Welcome to My Page! Тепер прочитаємо перші сім символів з цього файлу:
with open('highload.txt', 'r', encoding='Windows-1251') as f: data = f.read(7) print(data) >>> Welcome to My Page!
Після запуску коду Python відображає лише перше слово “Welcome” — перші сім символів рядка “Welcome to My Page!” у highload.txt.
Якщо ж у фрагменті коду не вказувати аргументи після функції read(), Python покаже всю інформацію. В даному випадку весь рядок «Welcome to My Page!».
Інформацію можна читати за допомогою функції readline(). Наприклад, у нашому файлі є чотири рядки:
Прочитаємо лише перший рядок із цього файлу, не вказуючи кількість символів.
with open('highload.txt', 'r', encoding='Windows-1251') as f: print(f.readline()) >>> Apple
Як бачите, Python відобразив лише перший рядок із цього списку. При неодноразовому виклику readline() ви зможете прочитати всі інші рядки:
with open('highload.txt', 'r', encoding='Windows-1251') as f: print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline()) >>> Apple >>> Plum >>> Banana >>> Strawberry
Але погодьтеся, постійно вказувати ту саму функцію не зовсім зручно. Щоб зробити процес привабливішим, краще відобразити readline() у циклі:
with open('highload.txt', 'r', encoding='Windows-1251') as f: for line in f: print(line) >>> Apple >>> Plum >>> Banana >>> Strawberry
Є ще один варіант. У ньому вся інформація читається в один рядок. У цьому нам допомагає метод readlines(), який повертає інформацію як перерахування зі спецсимволами:
with open('highload.txt', 'r', encoding='Windows-1251') as f: data = f.readlines() print(data) >>> ['Apple\n', 'Plum\n', 'Banana\n', 'Strawberry']
Альтернативою може бути конструктор списків list():
with open('highload.txt', 'r', encoding='Windows-1251') as f: data = list(f) print(data) >>> ['Apple\n', 'Plum\n', 'Banana\n', 'Strawberry']
Якщо документ надто великий, то рекомендується не перевантажувати оперативну пам’ять в ПК, а зчитувати його частинами.
Щоб виконати запис у файл Python, потрібні функції write() і open() з режимами запису (‘w’, ‘a’, ‘w+’, ‘a+’). Давайте розглянемо кілька прикладів:
Режим ‘w’ — запис (якщо файл існує, його буде видалено).
with open('highload.txt', 'w') as file: file.write("Welcome to My Page!!\n") file.write("2024.\n")
Режим ‘a’ — додавання даних (додає дані до кінця файлу).
with open('highload.txt', 'a') as file: file.write("New Year.\n")
Режим ‘w+’ — запис та читання (файл буде очищено, якщо він існує).
with open('highload.txt', 'w+') as file: file.write("Writing and reading in the same file.\n") file.seek(0) # переміщуємо курсор у перший рядок content = file.read() # зчитуємо дані print("More text here:") print(content)
Режим ‘a+’ — додавання та читання (додає дані до кінця файлу).
with open('highload.txt', 'a+') as file: file.write("New Year.\n") file.seek(0) content = file.read() print("More text here after adding:") print(content)
Робота з файловою системою – невід’ємна частина обов’язків будь-якого джуніора. Спочатку доведеться вчитися обробляти дані з файлів, зберігати їх чи управляти структурою каталогів. Оскільки ми вже знаємо, як відкривати і закривати файли в Python, і як записувати в них дані, тепер потрібно ознайомитися з іншими файловими операціями, які можуть знадобитися новачкові.
У синтаксисі Python є спеціальний модуль os для роботи з файловою системою. Ось кілька прикладів, як він використовується.
Створення нової папки:
import os os.mkdir('new_folder')
Перевірка наявності файлу чи папки:
if os.path.exists('highload.txt'): print("Файл існує")
Отримання списку файлів у директорії:
files = os.listdir('.') print("Файли в поточній директорії:", files)
Видалення файлу або папки:
os.remove('highload.txt') # Видаляє файл os.rmdir('new_folder') # Видаляє порожню папку
Використовуючи модуль os.path, можна працювати зі шляхами до файлів та папок. Перед нами приклад, як отримати абсолютний шлях:
import os abs_path = os.path.abspath('highload.txt') print("Абсолютний шлях до файлу:", abs_path)
Приклад комплексного використання
У цьому прикладі створюється нова папка, записується файл, а потім читаються його дані:
import os # Створюємо нову папку os.mkdir('test_folder') # Шлях до файлу file_path = os.path.join('test_folder', 'highload.txt') # Запис у файл with open(file_path, 'w') as file: file.write("Hello from the new folder!") # Читання з файлу with open(file_path, 'r') as file: content = file.read() print("Вміст файлу:") print(content) # Видалення файлу та папки os.remove(file_path) os.rmdir('test_folder')
У наведеному вище прикладі Python створює папку test_folder, потім записує в ній файл highload.txt, читає його, а потім видаляє, як файл, так і всю папку.
Робота з файлами та файловою системою в Python складається з кількох відносно простих команд. Володіти цими базовими операціями — це ключова навичка будь-якого розробника-початківця. Вміючи працювати з файлами, ви зможете зберігати дані для подальшого використання: записувати результати обчислень, зберігати налаштування та логи програми, а також інформацію користувача.
Володіючи командами для обробки даних, ви зможете виконувати завдання, що стосуються вилучення та збереження їх у різних форматах. Крім того, вони допомагають в автоматизації багатьох рутинних завдань: наприклад, при необхідності резервного копіювання багатьох файлів.
Sigma Software, що є підрозділом Sigma Software Group, заявила про зміну генерального директора. Компанію очолить…
Microsoft готує додати у Windows 11 новий «легкий» текстовий редактор Edit. Він важить всього 230…
Компанія OpenAI у найближчі тижні планує випустити оновлення для тарифного плану ChatGPT Pro, доступ до…
Керівники компаній часто вводять в оману, розповідаючи, що штучний інтелект лише підвищить продуктивність і не…
Уряд США пропонує до $10 мільйонів за інформацію про місцезнаходження розробника шкідливого програмного забезпечення RedLine…
Google оголосила про оновлення своєї LLM-моделі Gemini 2.5 Pro, яка, за твердженням компанії, стала краще…