Робота з файловими об'єктами: функція open, читання і запис у файли в Python
Опубликованно 01.04.2018 05:56
Файли належать до базових типів даних мови Python. Це сполучний інтерфейс між кодом і іменованими областями пам'яті комп'ютера. Файли виконують функцію «консервування» об'єктів. Вони дозволяють зберігати будь-яку інформацію з її подальшим вивантаженням і обробкою. Ми розглянемо, як здійснити запис у файл в Python і зворотне читання даних з практичними прикладами.
Як відкрити файл?
Робота з цим типом даних стартує з вбудованої функції open. Вона створює об'єкт файлу, який забезпечує зв'язок із зовнішнім документом на комп'ютері. Після того як ви викличте функцію, можна виконувати операції читання або запису у файли в Python.
Для новачків робота з файлами здасться складним. Вони відрізняються від звичних рядків, чисел, словників. Для взаємодії з ними не використовуються літерали послідовностей або відображень, тільки методи.
Більша частина методів спрямована на виконання введення і виведення інформації, але є і більш специфічні. Наприклад, інструкція output.flush(), яка виштовхує на диск вихідні буфери. Але ми почнемо з вивчення того, як відкрити файл.
Насамперед потрібно викликати open(), в дужках передати функції, ім'я зовнішнього файлу і режим роботи з ним:r – означає, що за замовчуванням відкриється режим читання;w – режим запису у файли в Python;a – для запису інформації в кінець документа;b – обробка двійкових файлів;знак «+» означає читання і запис одночасно.
Важливе правило – всі аргументи потрібно вказувати як літерали рядків, тобто в лапках і через кому: >>>This_file = open(«C:odd», «w») #Приклад виклику функції open в інтегрованому середовищі розробки.
Як використовувати файли?
Після того як файл відкритий, ви можете використовувати всі його методи. Вміст для читання буде представлено у вигляді рядків. Для запису у файли в Python інформація також повинна мати вигляд строкових об'єктів.
Список найбільш використовуваних операцій:input.read() – повертає інформацію в якості єдиної рядки;input.readline() – прочитати наступний рядок;input.readlines() – уявити файл для читання цілком зі списком рядків;.write() – запис рядків;.writelines() – запис всіх рядків;.close() – вручну закрити документ.
Особливості роботи з файлами
Вся інформація, що міститься всередині файлів, представлена у вигляді строкових об'єктів. Тому перш ніж приступити до її обробці, потрібно виконати перетворення даних. Використовуйте для цього вбудовані методи int() або list(). А також вирази для форматування рядків.
Використовувати метод close необов'язково. Але при роботі з flush звільняються ресурси ОС і відбувається виштовхування вихідних буферів. За замовчуванням висновок відбувається за допомогою проміжних буферів. Коли здійснюється запис у файл в Python, інформація не відразу потрапляє на диск, а тільки в момент закриття.
Приклад запису у файл
Розберемо приклад роботи з текстовим файлом в інтерактивному сеансі. Перший крок – це відкрити файл в IDLE. Попередньо його створювати немає необхідності:>>>первый_ф = open(«первый_файл.txt», «w»)>>>первый_ф.write(«Будь-який текст ») #Записуємо рядка12>>>первый_ф.write(«І знову будь-який текст »)20>>>первый_ф.close() #Закриваємо;>>>первый_ф = open(«первый_файл.txt»)>>>первый_ф.readline() #Читаємо, те, що записано«Будь-який текст »
Після запису рядка у файл, Python 3.0 повертає число введених символів. У попередній версії цього не відбувається. У прикладі використовувався символ кінця рядка . Без нього метод write запише всі суцільним текстом.
Якщо ви хочете прочитати вміст файлу без вказівки в кінці, скористайтеся методом read:>>>print(open(«первый_файл.txt»).read())будь-який текст;і знову текст;
Переглянути кожний рядок по черзі можна за допомогою ітерації:>>>for x in open(«первый_файл.txt»):print(x, end = « »)будь-який тексті знову текст #Кожна нова рядок буде виведена з відступом.Збереження базових об'єктів мови Python файл
У текстовий файл можна зберігати будь-які вбудовані або створені вручну об'єкти. Щоб здійснити запис у файли в Python порядково, кожен елемент потрібно попередньо перетворити на рядок. Також потрібно пам'ятати, що методи не форматують дані.>>>пример_2 = open(«второй_файл.txt», «w»)>>>Список = [1,8, «r»]>>>C, B, P = 34, 90, 56>>>Стр = «Набір символів»>>>пример_2.write(str(Список) + « »)12>>>пример_2.write(«%s, %s, %s » % (C, B, P))11>>>пример_2.write(Стр + « »)15>>>пример_2.close()>>>print(open(«второй_файл.txt»).read())[1, 8, «r»]34, 90, 56набір символів
У цьому прикладі спочатку створюється новий файловий об'єкт «второй_файл.txt» для запису. П'яти імен присвоюються значення списку, рядки й цілих чисел. Перед записом кожен об'єкт перетворюється в рядок. В кінці файл відкривається з допомогою вбудованої функції print і методу read.
За тим же принципом здійснюється в Python запис словника в файл. Необхідно викликати функцію str і передати їй як аргумент об'єкт. Складніше всього не зберегти дані, а отримати їх і перетворити назад в словники або числа.
Перетворення рядка в об'єкти мови допоможе метод readline:>>>L = open(«второй_файл.txt»)>>>F = L. readline()>>>F«34, 90, 56 »>>>Numbers = F. split(«,») #ком розбити на підрядки>>>Numbers[«34», «90», «56 »]>>>Numbers = [int(x) for x in Numbers] #Перетворити весь список>>>Numbers[34, 90, 56]Запис об'єктів за допомогою спеціальних модулів
До складу стандартної бібліотеки входить модуль під назвою pickle. Це надзвичайно корисний інструмент для запису і зворотного отримання інформації. Особливо в тому випадку, коли ви не довіряєте джерелу файлу.
Модуль являє собою універсальну утиліту, яка автоматично форматує і перетворює дані. Щоб записати об'єкт будь-якого типу (словник), його достатньо передати pickle:>>>Словник = {«вісім»: 8, «три»: 3, «нуль»: 0}>>>Словник{«вісім»: 8, «три»: 3, «нуль»: 0}>>>документ = open(«мой_документ.pkl», «wb»)>>>import pickle>>>pickle.dump(Словник, документ)>>>документ.close()>>>документ = open(«мой_документ.pkl», «rb»)>>>Д = pickle.load(документ)>>>Д{«вісім»: 8, «три»: 3, «нуль»: 0}
З модулем немає необхідності витягувати і перетворювати дані вручну. Він сам виконує серіалізацію об'єктів в рядок байтів і назад. Для цього в аргументах open вказується wb – write binary.
Аналогічно pickle, «консервувати» дані можна за допомогою модуля Python – JSON. Запис у файл здійснюється методом dump. В якості аргументів указуються зберігаються об'єкти, які автоматично сериализуются в рядок JSON-формату.>>>import json>>>Словник = {«вісім»: 8, «три»: 3, «нуль»: 0}>>>with open(«мой_документ.json», «w») as м_д:>>>json.dump(Словник, м_д)
Існують і більш складні способи роботи з файлами. Наприклад, операція сканування, організація циклів запису. Щоб побачити весь перелік методів, скористайтесь в інтерактивному сеансі функціями help або dir. Також в арсеналі мови є об'єкти, схожі на файли, - сокети, потоки командної оболонки і введення-виведення.
Категория: Техника