В будь-якій мові програмування, маніпуляції з файлами є фундаментальною частиною. Python пропонує різноманітні можливості для роботи з файлами, включаючи читання, запис та інші операції.
Пройшовши цей матеріал, ви зможете:
- Відкривати та зчитувати файли у Python.
- Зчитувати рядки з текстових файлів.
- Записувати дані у файли та додавати до них.
- Користуватися контекстними менеджерами для ефективної роботи з файлами в Python.
Зчитування файлів у Python
Для відкриття файлу в Python застосовується функція `open(‘назва_файлу’, ‘режим’)`.
- `назва_файлу` – це рядок, що вказує на ім’я файлу, з яким ви бажаєте працювати.
Зверніть увагу: якщо файл знаходиться в поточному робочому каталозі, достатньо вказати лише його ім’я. Якщо ж файл розташований в іншому каталозі, необхідно надати повний шлях до файлу.
- `режим` визначає тип операції, яку ви збираєтеся виконувати з файлом (читання, запис тощо).
Режим читання, позначений літерою “r”, є стандартним. Однак, рекомендується явно вказувати режим для уникнення неоднозначностей.
Перед початком роботи, розглянемо файл `lib.txt`, який ми будемо використовувати як приклад.
📁 Ви можете завантажити текстовий файл та код, що використовується в цій інструкції, з репозиторію GitHub.
Наступний приклад коду демонструє, як відкрити текстовий файл `lib.txt` у Python за допомогою функції `open()` та вивести його вміст.
file = open('lib.txt','r') contents = file.read() print(contents) file.close() # Вивід Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels
У наведеному прикладі:
- Функція `open()` повертає об’єкт файлу, який ми назвали `file`.
- Далі ми використовуємо метод `read()` для зчитування всього вмісту файлу.
- Змінна `contents` тепер містить повний вміст файлу, який ми виводимо на екран.
- Наостанок, ми закриваємо файл за допомогою методу `close()`.
Важливо закривати файли після використання. Забувши це зробити, можна спричинити втрату ресурсів. Особливо при роботі з великою кількістю файлів, це може призвести до значного навантаження на пам’ять, оскільки відкриті файли залишаються зайнятими.
Зараз ми розглянемо, як зручніше відкривати файли, використовуючи контекстні менеджери. Нижче наведено приклад їх застосування.
with open('lib.txt','r') as f: contents = f.read() print(contents)
Користуючись менеджерами контексту, немає потреби явно викликати метод `close()`. Файл автоматично закривається після завершення операцій введення-виведення.
Зчитування рядків з файлу в Python
У нашому прикладі текстовий файл мав лише кілька рядків, тому зчитування всього вмісту за раз не створювало проблем.
Проте, під час роботи з великими файлами, застосування методу `read()` може виявитися неефективним.
У випадку об’ємних текстових файлів, зчитування всього вмісту одразу може виснажити пам’ять. Тому в таких випадках краще зчитувати файли рядок за рядком. У цьому розділі ми розглянемо, як це зробити.
Використання методу `readline()` для зчитування рядків
Метод `readline()` дозволяє зчитувати один рядок з файлу за один раз.
Розглянемо наступний код:
with open('lib.txt','r') as f: line = f.readline() print(line) line = f.readline() print(line) # Вивід Hello, there! Here are a few helpful Python libraries:
З виводу видно, що після першого виклику `readline()` виводиться перший рядок файлу. Другий виклик `readline()` повертає наступний рядок.
Це відбувається тому, що після першого виклику покажчик файлу переміщується на початок наступного рядка.
У Python для отримання поточної позиції покажчика файлу можна використовувати метод `tell()`, а для переміщення покажчика в певне місце – метод `seek()`.
У наступному прикладі ми застосуємо `f.seek(0)` після першого виклику `readline()`, що перемістить покажчик на початок файлу. Таким чином, обидва виклики виведуть перший рядок файлу.
with open('lib.txt','r') as f: line = f.readline() print(line) f.seek(0) line = f.readline() print(line) # Вивід Hello, there! Hello, there!
Використання методу `readlines()` для зчитування рядків
Існує схожий метод `readlines()`.
Виконуючи наступний код, ми бачимо, що метод `readlines()` повертає список, який містить всі рядки файлу.
with open('lib.txt','r') as f: lines = f.readlines() print(lines) # Вивід ['Hello, there!\n', 'Here are a few helpful Python libraries:\n', '1) NumPy\n', '2) pandas\n', '3) matplotlib\n', '4) seaborn\n', '5) scikit-learn\n', '6) BeautifulSoup\n', '7) Scrapy\n', '8) nltk\n', '9) Bokeh\n', '10) statsmodels\n', '\n']
Використання циклу `for` для зчитування рядків
Для зчитування рядків з файлу можна також використовувати цикл `for`.
Маючи об’єкт файлу, ви можете використовувати цикл `for` для перебору рядків файлу по одному і виводити їх на екран. Важливо відзначити, що ми звертаємося до файлу рядок за рядком, а не зчитуємо весь його вміст одразу.
with open('lib.txt','r') as f: for line in f: print(line, end='')
Зверніть увагу: при використанні функції `print()` у Python, розділювачем за замовчуванням є символ нового рядка (`\n`). Проте в оригінальному файлі ми не маємо цих зайвих нових рядків. Тому ми встановлюємо аргумент `end` на порожній рядок (`end = ”`) для виведення вмісту файлу без додаткових розривів.
Зчитування фрагментів вмісту файлу
Python надає можливість зчитувати файли фрагментами певного розміру.
Розглянемо наступний приклад коду:
- Тут ми визначаємо `chunk_size` як 50. Це означає, що перші 50 символів файлу будуть зчитані та виведені.
- Далі ми викликаємо метод `tell()` для об’єкта файлу `f`. Ми бачимо, що покажчик файлу знаходиться на позиції 51, що відповідає очікуванням.
chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk) current = f.tell() print(f"Поточна позиція покажчика файлу: {current}") # Вивід Hello, there! Here are a few helpful Python librar Поточна позиція покажчика файлу: 51
Цей підхід можна використовувати для зчитування всього файлу невеликими частинами.
Нижче продемонстровано, як це можна зробити:
chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk,end='') while(len(chunk)>0): chunk = f.read(chunk_size) print(chunk,end='') # Вивід Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels
Тут ми використовуємо цикл `while` для зчитування файлу частинами розміром 50 символів до досягнення кінця файлу. ✅
Запис у файл в Python
Для запису у текстовий файл в Python, потрібно відкрити його в режимі запису, вказавши `’w’`.
Наступний приклад демонструє цей процес:
with open('new_file.txt','w') as f: f.write('Привіт, Python!')
Ви побачите, що у вашому робочому каталозі створиться новий файл `new_file.txt`.
Тепер виконайте той же код ще раз.
У терміналі введіть наступну команду:
cat new_file.txt # Вивід: Привіт, Python!
Теоретично, ми двічі виконали запис у файл, тому вираз “Привіт, Python!” мав би надрукуватися двічі, чи не так?
Однак, ви бачите, що вираз виведено лише один раз. Це відбувається тому, що при відкритті файлу в режимі запису (`’w’`) вміст файлу перезаписується новим вмістом.
Якщо ви бажаєте додати дані до кінця файлу, не видаляючи наявний вміст, потрібно відкрити файл в режимі додавання. У наступному розділі ми розглянемо, як це зробити.
Додавання до файлу в Python
Якщо ви бажаєте додати вміст до файлу, не перезаписуючи його, потрібно відкрити його в режимі додавання.
Для цього використовується `’a’` – від слова “append” (додавання). Не забудьте явно вказати цей режим.
Виконайте наступний код двічі:
with open('new_file.txt','a') as f: f.write('Привіт, Python!')
Зверніть увагу, що тепер текст друкується двічі, оскільки ми додаємо дані до файлу.
cat new_file.txt # Вивід: Привіт, Python!Привіт, Python!
Підсумок
Підсумуємо основні моменти, розглянуті в цій інструкції:
- Ви ознайомилися з базовими операціями введення-виведення файлів: зчитування, запис та додавання.
- Ви навчилися використовувати метод `seek()` для переміщення покажчика файлу до заданої позиції.
- Ви дізналися, як застосовувати метод `tell()` для отримання поточної позиції покажчика.
Сподіваємось, ця інструкція була для вас корисною. Тепер, коли ви вмієте працювати з текстовими файлами в Python, ви можете переходити до вивчення обробки JSON-файлів у Python.
Матеріали за темою:
Перевірка довжини списку в Python у 3 кроки.