Робота з текстовими файлами в Python

Автори: Вільям Туркел та Адам Краймбл Переклали на українську: Мар’яна Юрків, Анастасія Юрків Оригінал уроку: https://programminghistorian.org/en/lessons/working-with-text-files

У цьому уроці ви дізнаєтеся, як працювати з текстовими файлами за допомогою Python.

Мета уроку

У цьому уроці ви дізнаєтеся, як працювати з текстовими файлами. Це включає відкриття, закриття, зчитування та запис у файли .txt за допомогою мови програмування Python.

Наступні кілька уроків цієї серії передбачатимуть завантаження вебсторінки з Інтернету та реорганізацію вмісту в корисні фрагменти інформації. Більшу частину вашої роботи складатиме написання і виконання коду на Python у Komodo Edit або будь-якому іншому середовищі розробки, наприклад, Visual Studio Code, Google Colab тощо. Також можете використати консоль IDLE shell, яка встановлюється автоматично під час інсталяції Python:

Робота з текстовими файлами

Мова Python значно полегшує роботу з файлами та текстом. Розпочнемо з файлів.

Створення та заповнення текстового файлу

Почнемо з короткого обговорення термінології. У попередньому уроці (залежно від вашої операційної системи: інсталяція Mac, інсталяція Windows або інсталяція Linux) ви бачили, як передати інформацію у вікні виводу (консолі чи терміналі) редактора коду за допомогою команди в Python print (друк).

print('hello world')

Мова програмування Python є об'єктно-орієнтованою. Це означає, що у ній все побудовано навколо спеціального виду сутності, об’єкта, який містить як дані, так і низку методів для доступу та зміни цих даних. Коли об’єкт створено, він може взаємодіяти з іншими об’єктами.

У наведеному вище прикладі ми бачимо один тип об’єктів, рядок «hello world». Рядок (string) — це послідовність символів, укладених у лапки. Ви можете записати рядок одним із трьох способів:

message1 = 'hello world'
message2 = "hello world"
message3 = """hello
hello
hello world"""

Важливо зауважити, що в перших двох прикладах ви можете використовувати одинарні або подвійні лапки, але ви не можете використовувати обидва в записі одного рядка.

Наприклад, усі наступні записи є помилками:

message1 = "hello world'
message2 = 'hello world"
message3 = 'I can't eat pickles'

Підрахуйте кількість одинарних лапок у message3. Щоб цей запис запрацював, вам потрібно уникнути апострофу:

message3 = 'I can\'t eat pickles'

У мові Python зворотна коса риска (backslash) '''' є спеціальним символом у рядках, який також називають символом escape. Зазвичай його використовують для представлення певних символів у рядках: '\t' — символ табуляції, '\n' — символ нового рядка i '\r' — символ повернення каретки. Також, додавання префікса '''' до символу, що є неприпустимими в рядку перетворює його на звичайний символ.

Ще одним варіантом уникнення проблеми буде:

message3 = "I can't eat pickles"

У третьому прикладі потрійні лапки означають рядок, який охоплює більше одного рядка символів.

Print — це команда, яка виводить дані в текстовому форматі. Команда print у поєднанні з рядком (об’єкт типу string) створює інструкцію (це один рядок коду у програмі, який виконує певне завдання).

Ви будете використовувати print у випадках, коли захочете вивести записану інформацію, яка повинна негайно відобразиться. Oднак, іноді ви будете записувати інформацію, яку хочете зберегти, надіслати комусь іншому або використати як вхідні дані для подальшої обробки іншою програмою чи набором програм. У цих випадках вам потрібно буде надіслати інформацію до файлів на жорсткому диску, а не до панелі виводу редактора коду.

Введіть наступний код у свій редактор і збережіть її як файл під назвою file-output.py.

# file-output.py
f = open('helloworld.txt','w')
f.write('Hello World!')
f.close()

У Python будь-який рядок, який починається з решітки (#), відомий як коментар та ігнорується інтерпретатором Python. Коментарі призначені для того, щоб дозволити програмістам спілкуватися один з одним (або нагадати собі про те, що робить код, коли вони повертаються до нього через кілька місяців). У більш широкому сенсі самі програми зазвичай написані та відформатовані таким чином, щоб програмістам було легше розуміти один одного. Код, який ближче до стандартів машини (так званого машинного коду), називають низькорівневим, тоді як код, який ближче до природної мови, — високорівневим. Одна з переваг використання такої мови, як Python, полягає в тому, що вона високорівнева і відповідно є легшою для написання і сприйняття коду людиною (але при цьому втрачаючи швидкість та ефективність обчислень).

У цій програмі f є файловим об’єктом, а open (відкриття), write (запис) і close (закриття) є файловими методами. Іншими словами, open, write і close виконують певні дії з об’єктом f, який у цьому випадку визначено як файл .txt. Ймовірно, це інше використання терміна «метод», ніж ви могли б очікувати, і час від часу ви побачите, що слова, які використовуються в контексті програмування, мають трохи (або зовсім) інші значення, ніж вони мають у повсякденній мові. У цьому випадку згадайте, що методи — це фрагменти коду, які виконують дії. Вони роблять щось з чимось іншим і повертають результат. Ви можете спробувати подумати про це на реальному прикладі, наприклад, віддавати команди собаці. Собака (об'єкт) розуміє команди (тобто має "методи"), такі як "гавкай", "сидіти", "прикидайся мертвим" тощо. Впродовж цієї серії уроків ми обговоримо та навчимося використовувати багато інших методів.

f — обране нами ім'я змінної; ви можете назвати його як завгодно. У Python імена змінних можуть складатися з великих і малих літер, цифр і символів підкреслення… але ви не можете використовувати імена інших команд Python як назви змінних. Наприклад, якщо ви спробуєте назвати змінну файлу «print», ваша програма не працюватиме, оскільки це зарезервоване слово, яке є частиною мови програмування.

Назви змінних Python також чутливі до регістру, що означає, що foobar, Foobar і FOOBAR будуть різними змінними.

Коли ви запустите цю програму, метод open скаже вашому комп’ютеру створити новий текстовий файл helloworld.txt у тій же папці, де ви зберегли програму file-output.py. Параметр w вказує на те, що ви маєте намір саме записати певну інформацію у цей новий файл за допомогою Python.

Зауважте, що оскільки і назва файлу, і параметр оточені одинарними лапками, то вони обидва зберігаються як рядки (string); якщо забути взяти лапки, ваша програма не працюватиме.

У наступному рядку ваша програма записує у файл повідомлення «hello world» (ще один рядок), а потім закриває файл. (Для отримання додаткової інформації про ці оператори перегляньте розділ "Методи файлових об'єктів" в Довіднику з бібліотеки Python.)

Двічі клацніть на кнопку "Запустити Python" у Komodo Edit, щоб запустити програму (або еквівалент у будь-якому редакторі коду, який ви вирішите використовувати: наприклад, клацніть "#!" і "Виконати" в TextWrangler). У випадку якщо нічого не буде надруковано на панелі виводу, ви побачите повідомлення про стан, яке говорить щось на кшталт

`/usr/bin/python file-output.py` returned 0.

на Mac або Linux, або

'C:\Python311\Python.exe file-output.py' returned 0.

на Windows.

Це означає, що ваша програма виконана успішно. Якщо ви використовуєте File - Open - File у своєму Komodo Edit, ви можете відкрити файл helloworld.txt. Він повинен містити ваше однорядкове повідомлення:

Hello World!

Якщо, наприклад, відкрити ваш текстовий файл helloworld.txt у програмі Блокнот, то він виглядатиме так

Оскільки текстові файли містять мінімальну кількість інформації про форматування, вони, як правило, невеликі, їх легко обмінювати між різними платформами (наприклад з Windows на Linux або Mac або навпаки) і легко надсилати з однієї комп’ютерної програми на іншу. Зазвичай їх також можуть читати люди, які використовують редактор, як-от Komodo Edit.

Зчитування з текстового файлу

Python також має методи, які дозволяють отримувати інформацію з файлів. Введіть наступний код у текстовий редактор і збережіть його як file-input.py. Коли ви натиснете "Виконати", щоб запустити виконання коду, він відкриє текстовий файл, який ви щойно створили, зчитає його однорядкове повідомлення та надрукує повідомлення на панелі виводу.

# file-input.py
f = open('helloworld.txt','r')
message = f.read()
print(message)
f.close()

У цьому випадку параметр r вказує, що ви відкриваєте файл для його зчитування. Параметри дозволяють обирати серед різних варіантів дій, які доступні певному методу. Повертаючись до прикладу з собакою, собаку можна навчити гавкати один раз, коли він отримує смаколик зі смаком яловичини, і два рази, коли вона отримує смаколик зі смаком курки. Смак таких ласощів – параметр. Кожен метод відрізняється тим, які параметри він прийматиме. Ви не можете, наприклад, попросити собаку заспівати італійську оперу - якщо ваш пес не особливо талановитий. Ви можете знайти можливі параметри для певного методу на вебсайті Python, а також можете ознайомитись з ними, ввівши метод у пошукову систему дописавши "Python".

read (зчитування) — ще один файловий метод. Вміст файлу (однорядкове повідомлення) копіюється у рядок, який ми назвали змінною message, а потім команда print використовується для виводу вмісту змінної message на панель виводу.

Результат виконання цієї програми, наприклад, у IDLE shell матиме вигляд:

А у терміналі Visual Studio Code такий:

Додавання до попередньо існуючого текстового файлу

Третій варіант — відкрити вже існуючий файл і додати до нього інформацію. Зауважте, що якщо ви відкриєте (open) файл і використаєте метод write, програма перезапише все у файлі, тобто зітре попередню інформацію і запише нову. Це не проблема, коли ви створюєте новий файл або коли хочете перезаписати вміст існуючого файлу, але це може бути небажаним, коли ви створюєте журнал подій або збираєте великий набір даних в один файл. Отже, замість write вам потрібно використати метод append, позначений параметром a.

Введіть наступний код у текстовий редактор і збережіть його як file-append.py. Коли ви запустите цю програму, вона відкриє той самий файл helloworld.txt, створений раніше, і додасть до нього друге "helloworld, world". "/n" означає новий рядок.

# file-append.py
f = open('helloworld.txt','a')
f.write('\n' + 'Hello World')
f.close()

Після запуску програми відкрийте файл helloworld.txt і подивіться, що сталося. Закрийте текстовий файл і повторно запустіть file-append.py ще кілька разів. Коли ви знову відкриєте helloworld.txt, ви повинні побачити кілька додаткових повідомлень "Hello World".

У наступному розділі ми обговоримо модульність і повторне використання коду.

Рекомендована література

Про авторів

Вільям Туркел, професор історії в Університеті Західного Онтаріо. Адам Краймбл, Університетський коледж Лондона.

Переклад українською: Юрків Мар’яна, доцент кафедри картографії та геопросторового моделювання Національного університету “Львівська політехніка”, ORCID. Юрків Анастасія, студентка Львівського національного університету імені Івана Франка

Переклад рецензували: Володимир Нікулішин, доцент кафедри Картографії та геопросторового моделювання Національного Університету "Львівська Політехніка", к.т.н, ГІС розробник, Python розробник. Кирило Осінський, Senior Software Engineer, Cheil Germany GmbH.

Рекомендоване цитування: Туркел, Вільям та Краймбл, Адам, "Робота з текстовими файлами в Python." Programming Historian, переклали Мар’яна Юрків та Анастасія Юрків, Посібник з цифрової історії, 2024. DOI: https://doi.org/10.69915/dh009

Last updated