You are on page 1of 9

Лекція 7.

РОБОТА З ФАЙЛАМИ

7.1 Робота з файлами в PYTHON

Найчастіше дані для обробки надходять із зовнішніх джерел – файлів.


Існують різні формати файлів, найбільш простий і універсальний – текстовий. Він
відкривається в будь-якому текстовому редакторі (наприклад, Блокноті). Розширення у
текстових файлів: .txt, .html, .csv (їх досить багато).
Крім текстових є інші типи файлів (музичні, відео, .doc, .ppt та ін.), Які відкриваються в
спеціальних програмах (музичний або відео програвач, MS Word та ін.).
У цьому розділі зупинимося на текстових файлах, хоча можливості Python цим не
обмежуються.
Виконаємо кілька кроків.
1. Створимо каталог (папку) file_examples.
2. За допомогою (наприклад, Блокнота) створимо в каталозі file_examples текстовий
файл example_text.txt, що містить наступний текст:
First line of text
Second line of text
Third line of text
3. Створимо в каталозі file_examples файл 7_1_file_reader.py, що містить вихідний текст
програми на мові Python:
file = open('example_text.txt', 'r')
contents = file.read ()
print(contents)
file.close()
Розглянемо цей вихідний код:
file – файловий об’єкт містить інформацію про файл, що відкривається: файловий
курсор, тобто скільки вже прочитано («закладка у книзі»);
open – відкриття файлу («відкриття книги при читанні»);
'example_text.txt' – ім’я файлу;
'r' – режим відкриття файлу: r – читання;
contents = file.read () – прочитати вміст файлу у строку та помістити у
змінну contents;
file.close() – звільнити зайняті файлом ресурси.

Запустимо програму 7_1_file_reader.py:

>>>
==== RESTART: C:\Python\file_examples\7_1_file_reader.py =====
First line of text
Second line of text
Third line of text

>>>

Розглянутий підхід по роботі з файлами в Python перейшов з мови Сi.


За замовчуванням, якщо не вказувати режим відкриття, то використовується відкриття
на «читання».
Файли особливо піддаються помилкам під час роботи з ними. Диск може заповнитися,
користувач може видалити використовуваний файл під час запису, файл можуть перемістити

Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування. Лекція 7 1


і т.д. Ці типи помилок можна перехопити за допомогою обробки винятків:

# Помилка при відкритті файлу


try:
f = open('example_text.txt') # відкриття на читання
except:
print("Error opening file")
else: # виконується в будь-якому випадку
f.close()
print('(Очищення: Закриття файлу)')

Запустимо програму:

>>>
=== RESTART: C:\Python\file_examples\7_1_1_file_reader.py ===
Error opening file
>>>

Надалі для роботи з файлами ми будемо використовувати менеджер контексту


(інструкцію with), який не вимагає ручного звільнення ресурсів. Перепишемо попередній
приклад з використанням менеджера контексту:

try:
with open('1example_text.txt', 'r') as file:
contents = file.read()
print(contents)
except:
print("Error opening file")

Виконаємо програму:

>>>
== RESTART: C:\Python\file_examples\7_1_2_file_reader.py ==
Error opening file
>>>

Оригінальний текст помітно спростився, тому що звільнення ресурсів в цьому випадку


відбувається автоматично (всередині менеджера контексту).

Яким чином Python визначає, де шукати файл для відкриття? У момент виклику
функції open Python шукає вказаний файл в поточному робочому каталозі. У момент
запуску програми поточний робочий каталог там, де збережена програма.
Визначити поточний робочий каталог можна наступним чином:

>>> import os
>>> os.getcwd()
'C:\\Python\\file_examples'
>>>

Якщо файл знаходиться в іншому каталозі, то необхідно вказати шлях до нього:


1. Абсолютний шлях (починаючи з кореневого каталогу):
'C:\\Users\\McSym\\data1.txt'
2. Відносний шлях (щодо поточного робочого каталогу):

Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування. Лекція 7 2


'data\\data1.txt'

Далі розглянемо деякі способи читання вмісту файлу.


У наступному прикладі відбувається читання вмісту всього файлу, починаючи з
поточної позиції курсора (переміщує курсор в кінець файлу):

with open('example_text.txt', 'r') as file:


contents = file.read()
print(contents)

Результат виконання:

>>>
=== RESTART: C:\Python\file_examples\7_1_3_file_reader.py ===
First line of text
Second line of text
Third line of text
>>>

Наступний приклад демонструє роботу з курсором:

with open('example_text.txt', 'r') as file:


contents = file.read(10) # вказуємо кількість символів
для читання
# курсор переміщається на 11
символ
rest = file.read() # читаємо з 11 символу
print("10:", contents)
print("інше:", rest)

Результат роботи програми:

>>>
=== RESTART: C:\Python\file_examples\7_1_4_file_reader.py ===
10: First line
інше: of text
Second line of text
Third line of text
>>>

Якщо необхідно отримати список, що складається з рядків, то можна скористатися


методом readlines:

with open('example_text.txt', 'r') as file:


lines = file.readlines()
print(lines)

Результат роботи програми:

>>>
==== RESTART: C:\Python\file_examples\7_1_5_file_reader.py ====
['First line of text\n', 'Second line of text\n', 'Third line
of text']
>>>

Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування. Лекція 7 3


Для демонстрації наступного прикладу створимо файл plan.txt, що містить наступний
текст:
January
February
March
April
May
June
July
August
September
October
November
December

Далі запустимо програму (з урахуванням поточного робочого каталогу!):

with open('plan.txt', 'r') as file:


months = file.readlines()

print(months)

for months in reversed(months):


print(months.strip())

В результаті виконання отримаємо:

>>>
=== RESTART: C:\Python\file_examples\7_1_6_file_reader.py ====
['January\n', 'February\n', 'March\n', 'April\n', 'May\n',
'June\n', 'July\n', 'August\n', 'September\n', 'October\n',
'November\n', 'December']
December
November
October
September
August
July
June
May
April
March
February
January
>>>

Коментарі до початкового тексту:


file.readlines() – читає вміст файлу у вигляді списку рядків:

['January\n', 'February\n', 'March\n', 'April\n', 'May\n',


'June\n', 'July\n', 'August\n', 'September\n', 'October\n',
'November\n', 'December'];

Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування. Лекція 7 4


reversed(months) – відображує елементи списку у зворотному порядку;

months.strip() – повертає копію рядка, з якого видалено символ ‘\n’.

Використовуйте наступний спосіб читання з файлу, якщо хочете зробити деякі операції
з кожним з рядків, починаючи з поточної позиції файлового курсора до кінця файлу:

with open('plan.txt', 'r') as file:


for line in file:
print(line)
print(len(line.strip()))

Результат виконання:

>>>
==== RESTART: C:\Python\file_examples\7_1_7_file_reader.py ====
January

7
February

8
March

5
April

5
May

3
June

4
July

4
August

6
September

9
October

7
November

8
December
8
>>>

Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування. Лекція 7 5


Наступний приклад робить запис рядка в файл. Якщо файлу з вказаним ім'ям в
робочому каталозі немає, то він буде створений, якщо файл з таким ім'ям існує, то він буде
перезаписаний:

with open("top.txt", 'w') as output_file:


output_file.write("Hello!\n")
# метод write() повертає число записаних символів

Для додавання рядка в файл необхідно відкрити файл в режимі «a» (скор. від append):

with open("top.txt", 'a') as output_file:


output_file.write("Hello!\n")

Наступний приклад показує, як можна безпосередньо звертатися до файлів, що


знаходяться в мережі Інтернет:

import urllib.request
url = "https://ivstem.kpi.ua/wp-
content/uploads/python/ivteb.txt"
with urllib.request.urlopen(url) as webpage:
for line in webpage:
line = line.strip()
line = line.decode('utf-8') # перетворимо тип bytes в
utf-8
print(line)

7.2. Регулярні вирази

Python підтримує потужну мову регулярних виразів, тобто шаблони, за якими можна
шукати/замінювати деякий текст.
Наприклад, регулярний вираз '[ea]' означає будь-який символ з набору в дужках,
тобто регулярний вираз 'r[ea]d' збігається з 'red' і 'radar', але не зі словом
'read'.
Для роботи з регулярними виразами необхідно імпортувати модуль re:

>>> import re
>>> re.search ("r[ea]d", "rad") # вказуємо шаблон і текст
<re.Match object; span = (0, 3), match = 'rad'>
>>> re.search ("r[ea]d", "read")
>>> re.search ("[1-8]", "3") # шукає збігом з будь-яким числом
з інтервалу
<re.Match object; span = (0, 1), match = '3'>
>>> re.search ("[1-8]", "9")
>>>

У разі збігу тексту з шаблоном повертається об'єкт match, інакше повертається


None.

Сортування списку:

>>> sorted("This is a test string from Andrew".split())


['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']

Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування. Лекція 7 6


>>> str.lower ("a")
'a'
>>> str.lower ('Andrew')
'andrew'

Сортування з попередніми застосуванням до кожного елементу списку строкового


методу lower. Метод вказується в якості значення параметра key.

>>> sorted("This is a test string from Andrew".split(), key=str.lower)


['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

Створення та сортування словника за значенням:

>>> d = {"t1": 2, "t6": 5, "t9": 1}


>>> d
{'t1': 2, 't6': 5, 't9': 1}
>>> sorted(d)
['t1', 't6', 't9']
>>> d.get ('t1')
2
>>> sorted(d, key=d.get)
['t9', 't1', 't6']

ПЕРЕЛІК ПОСИЛАНЬ

1. ОСНОВИ ПРОГРАМУВАННЯ: методичні вказівки до виконання


комп‘ютерних практикумів на PYTHON з навчальної дисципліни «Основи програмування»
для студентів спеціальності 122 «Комп‘ютерні науки» зі спеціалізації «Інформаційні
технології в біології та медицині» / Уклад. Л.М. Добровська. – К.: НТУУ «КПІ ім. Ігоря
Сікорського», 2017. – 254 с.
2. Федоров, Д. Ю. Программирование на языке высокого уровня Python :
учебное пособие для прикладного бакалавриата / Д. Ю. Федоров. — М. : Издательство
Юрайт, 2018. — 126 с. — (Серия : Бакалавр. Прикладной курс).
3. Таблиці спеціальних методів (Special method names) [Електронний ресурс]. –
Режим доступу https://docs.python.org/3/reference/datamodel.html#special-method-names.
4. Oleksandr Medviediev. Работа с файлами (открытие) в Python 3 - file openning
(Уроки Python) RU. // Youtube. – режим доступу:
https://www.youtube.com/watch?v=Pltc9NCTogI&list=PLuNgT_5jX-
FzEvVAqIs0lUGmlrA8k0ntQ&index=46&t=0s. – Назва з екрану. Дата публікації: 01.04.2017. –
Дата перегляду: 21.03.2020.
5. Oleksandr Medviediev Работа с файлами (чтение) в Python 3 - read from file
(Уроки Python) RU. // Youtube. – режим доступу:
https://www.youtube.com/watch?v=92YzXhT3Dic&list=PLuNgT_5jX-
FzEvVAqIs0lUGmlrA8k0ntQ&index=47&t=0s. – Назва з екрану. Дата публікації: 22.11.2017. –
Дата перегляду: 21.03.2020.
6. Oleksandr Medviediev. Работа с файлами (запись) в Python 3 - writing files
(Уроки Python) RU. // Youtube. – режим доступу:
https://www.youtube.com/watch?v=nAyyASrT_so&list=PLuNgT_5jX-
FzEvVAqIs0lUGmlrA8k0ntQ&index=48&t=0s. – Назва з екрану. Дата публікації: 24.11.2017. –
Дата перегляду: 21.03.2020.

Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування. Лекція 7 7


Вправа 7.1
Відсортований за алфавітом вміст файлу plan.txt (попередньо створіть його власноруч)
помістіть в файл sort_plan.txt.

Вправа 7.2 (7 балів)


Напишіть програму, яка створює (генерує) повноцінний HTML-документ, що містить
текст, наведений за одним із посилань:
https://ivstem.kpi.ua/wp-content/uploads/python/dumi.txt
https://ivstem.kpi.ua/wp-content/uploads/python/dumka.txt
https://ivstem.kpi.ua/wp-content/uploads/python/dumka2.txt
https://ivstem.kpi.ua/wp-content/uploads/python/dumka3.txt
https://ivstem.kpi.ua/wp-content/uploads/python/dumka4.txt
https://ivstem.kpi.ua/wp-content/uploads/python/kateryna1.txt
https://ivstem.kpi.ua/wp-content/uploads/python/kateryna2.txt
https://ivstem.kpi.ua/wp-content/uploads/python/kateryna3.txt
https://ivstem.kpi.ua/wp-content/uploads/python/kateryna4.txt
https://ivstem.kpi.ua/wp-content/uploads/python/kateryna5.txt
https://ivstem.kpi.ua/wp-content/uploads/python/kotlyar.txt
https://ivstem.kpi.ua/wp-content/uploads/python/prichinna.txt
https://ivstem.kpi.ua/wp-content/uploads/python/taras_nich.txt
https://ivstem.kpi.ua/wp-content/uploads/python/topolya.txt

Під текстом (перед текстом) програма розміщує одну з картинок:


https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_01.jpg
https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_02.jpg
https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_03.jpg
https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_04.jpg
https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_05.jpg
https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_06.jpg
https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_07.jpg
https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_08.jpg
https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_09.jpg
https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_10.jpg
https://ivstem.kpi.ua/wp-content/uploads/python/t_sh_11.jpg

Приклад підсумкового HTML-документа:


https://ivstem.kpi.ua/wp-content/uploads/python/priklad.html
(зверніть увагу на код сторінки, що містить HTML-теги).
Виконайте обробку помилок. В момент читання і запису використовуйте параметр
функції open encoding = 'utf-8'.

Вправа 7.3
Знайдіть у файлі (файл знаходиться в мережі Інтернет):
https://ivstem.kpi.ua/wp-content/uploads/python/ivteb.txt
рядки, що містять назви дисциплін («Назва»). Запишіть знайдені рядки в файл з ім'ям
dyscipliny.txt.

Вправа 7.4
Очистіть файл від HTML-тегів:
https://ivstem.kpi.ua/wp-content/uploads/python/priklad.html
Виведіть на екран «чистий» текст.
PS. можна використовувати тільки стандартні модулі Python.

Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування. Лекція 7 8


Вправа 7.5
Визначте частоту зустрічаємості всіх слів для тексту, що знаходиться в мережі Інтернет
(оберіть один з текстів із вправи 7.1). Використовуйте словники (dict).

Вправа 7.6 (3 бали)


Напишіть функцію stringCount, яка приймає два вхідних аргументи – ім'я файлу і
рядок, а повертає число повторень зазначеного рядка в зазначеному файлі.

Вправа 7.7 (3 бали)


Реалізуйте функцію myGrep, яка приймає два вхідних аргументи – ім'я файлу і рядок, а
виводить на екран всі рядки зазначеного файлу, що містять заданий рядок в якості
підрядка:
>>> myGrep ('example.txt', 'line')
The 3 lines in this file end with the new line character.
There is a blank line above this line.

Вправа 7.8 (3 бали)


Реалізуйте функцію links, яка приймає на вхід ім'я HTML-файлу і повертає кількість
гіперпосилань в цьому файлі (тег </a>):
>>> links ('twolinks.html')
2

Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування. Лекція 7 9

You might also like