В данной статье мы рассмотрим встроенные средства python для работы с файлами: открытие / закрытие, чтение и запись.
Итак, начнем. Прежде, чем работать с файлом, его надо открыть. С этим замечательно справится встроенная функция open:
У функции open много параметров, они указаны в статье «Встроенные функции», нам пока важны 3 аргумента: первый, это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл.
Режим | Обозначение |
‘r’ | открытие на чтение (является значением по умолчанию). |
‘w’ | открытие на запись, содержимое файла удаляется, если файла не существует, создается новый. |
‘x’ | открытие на запись, если файла не существует, иначе исключение. |
‘a’ | открытие на дозапись, информация добавляется в конец файла. |
‘b’ | открытие в двоичном режиме. |
‘t’ | открытие в текстовом режиме (является значением по умолчанию). |
‘+’ | открытие на чтение и запись |
Режимы могут быть объединены, то есть, к примеру, ‘rb’ — чтение в двоичном режиме. По умолчанию режим равен ‘rt’.
[Python] Как открывать .py файл двойным кликом в редакторе IDLE на Windows
И последний аргумент, encoding, нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку.
Чтение из файла
Открыли мы файл, а теперь мы хотим прочитать из него информацию. Для этого есть несколько способов, но большого интереса заслуживают лишь два из них.
Первый — метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n).
Ещё один способ сделать это — прочитать файл построчно, воспользовавшись циклом for:
Запись в файл
Теперь рассмотрим запись в файл. Попробуем записать в файл вот такой вот список:
Откроем файл на запись:
Запись в файл осуществляется с помощью метода write:
После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:
Теперь попробуем воссоздать этот список из получившегося файла. Откроем файл на чтение (надеюсь, вы поняли, как это сделать?), и прочитаем строки.
Мы получили тот же список, что и был. В более сложных случаях (словарях, вложенных кортежей и т. д.) алгоритм записи придумать сложнее. Но это и не нужно. В python уже давно придумали средства, такие как pickle или json, позволяющие сохранять в файле сложные структуры.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv — чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Источник: pythonworld.ru
Python: КАК ОТКРЫТЬ ФАЙЛ и не потерять все
Как прочитать текстовый файл в Python
В Python есть несколько способов прочитать текстовый файл. В этой статье мы рассмотрим функцию open() , методы read() , readline() , readlines() , close() и ключевое слово with .
Как открыть текстовый файл в Python с помощью open()
Если вы хотите прочитать текстовый файл с помощью Python, вам сначала нужно его открыть.
Вот так выглядит основной синтаксис функции open() :
open(«name of file you want opened», «optional mode»)
Имена файлов и правильные пути
Если текстовый файл, который нужно открыть, и ваш текущий файл находятся в одной директории (папке), можно просто указать имя файла внутри функции open() . Например:
open («demo.txt»)
На скрине видно, как выглядят файлы, находящиеся в одном каталоге:
Но если ваш текстовый файл находится в другом каталоге, вам необходимо указать путь к нему.
В этом примере файл со случайным текстом находится в папке, отличной от той, где находится файл с кодом main.py:
В таком случае, чтобы получить доступ к этому файлу в main.py, вы должны включить имя папки с именем файла.
Если путь к файлу будет указан неправильно, вы получите сообщение об ошибке FileNotFoundError .
Таким образом, чтобы указать путь к файлу правильно, важно отслеживать, в каком каталоге вы находитесь.
Необязательный параметр режима в open()
При работе с файлами существуют разные режимы. Режим по умолчанию – это режим чтения.
Он обозначается буквой r .
open(«demo.txt», mode=»r»)
Вы также можете опустить mode= и просто написать «r» .
open(«demo.txt», «r»)
Существуют и другие типы режимов, такие как «w» для записи или «a» для добавления. Мы не будем вдаваться в подробности о других режимах, потому что в этой статье сосредоточимся исключительно на чтении файлов.
Полный список других режимов можно найти в документации.
Дополнительные параметры для функции open() в Python
Функция open() может также принимать следующие необязательные параметры:
- buffering
- encoding
- errors
- newline
- closefd
- opener
Если вы хотите узнать больше об этих опциональных параметрах, можно заглянуть в документацию.
Метод readable(): проверка доступности файла для чтения
Если вы хотите проверить, можно ли прочитать файл, используйте метод readable() . Он возвращает True или False .
Следующий пример вернет True , потому что мы находимся в режиме чтения:
file = open(«demo.txt») print(file.readable())
Если бы мы изменили этот пример на режим «w» (для записи), тогда метод readable() вернул бы False :
file = open(«demo.txt», «w») print(file.readable())
Что такое метод read() в Python?
Метод read() будет считывать все содержимое файла как одну строку. Это хороший метод, если в вашем текстовом файле мало содержимого .
В этом примере давайте используем метод read() для вывода на экран списка имен из файла demo.txt:
file = open(«demo.txt») print(file.read())
Запустим этот код и получим следующий вывод:
# Output: # This is a list of names: # Jessica # James # Nick # Sara
Этот метод может принимать необязательный параметр, называемый размером. Вместо чтения всего файла будет прочитана только его часть.
Если мы изменим предыдущий пример, мы сможем вывести только первое слово, добавив число 4 в качестве аргумента для read() .
file = open(«demo.txt») print(file.read(4)) # Output: # This
Если аргумент размера опущен или число отрицательное, то будет прочитан весь файл.
Что такое метод close() в Python?
Когда вы закончили читать файл, необходимо его закрыть. Если вы забудете это сделать, это может вызвать проблемы и дальнейшие ошибки.
Вот пример того, как закрыть файл demo.txt:
file = open(«demo.txt») print(file.read()) file.close()
Как использовать ключевое слово with в Python
Один из способов убедиться, что ваш файл закрыт, – использовать ключевое слово with . Это считается хорошей практикой, потому что файл закрывается не вручную, а автоматически. Более того, это просто крайне удобно и защищает вас от ошибок, которые могут возникнуть, если вы случайно забудете закрыть файл.
Давайте попробуем переписать наш пример, используя ключевое слово with :
with open(«demo.txt») as file: print(file.read())
Что такое метод readline() в Python?
Этот метод читает одну строку из файла и возвращает ее.
В следующем примере у нас есть текстовый файл с двумя предложениями:
This is the first line This is the second line
Если мы воспользуемся методом readline() , он выведет нам только первое предложение нашего файла.
with open(«demo.txt») as file: print(file.readline()) # Output: # This is the first line
Этот метод также принимает необязательный параметр размера. Мы можем изменить наш пример, добавив число 7. В таком случае программа считает и выведет нам только фразу This is :
with open(«demo.txt») as file: print(file.readline(7))
Что такое метод readlines() в Python?
Этот метод читает и возвращает список всех строк в файле.
Предположим, у нас есть текстовый файл demo.txt со списком покупок:
Grosery Store List: Chicken Mango Rice Chocolate Cake
В следующем примере давайте выведем наши продукты в виде списка с помощью метода readlines() .
with open(«demo.txt») as file: print(file.readlines()) # Output: # [‘Grocery Store List:n’, ‘Chickenn’, ‘Mangosn’, ‘Ricen’, ‘Chocolate Caken’]
Как прочитать текстовый файл при помощи цикла for
В качестве альтернативы методам чтения можно использовать цикл for .
Давайте распечатаем все элементы файла demo.txt, перебирая объект в цикле for .
with open(«demo.txt») as file: for item in file: print(item)
Запустим наш код и получим следующий результат:
# Output: # Grocery Store List: # Chicken # Mango # Rice # Chocolate Cake
Заключение
Итак, если вы хотите прочитать текстовый файл в Python, вам сначала нужно его открыть.
open(«name of file you want opened», «optional mode»)
Если текстовый файл и ваш текущий файл, где вы пишете код, находятся в одной директории, можно просто указать имя файла в функции open() .
Если ваш текстовый файл находится в другом каталоге, вам необходимо указать правильный путь к нему.
Функция open() принимает необязательный параметр режима. Режим по умолчанию – чтение ( «r» ).
Чтобы проверить, можно ли прочитать текстовый файл, вы можете использовать метод readable() . Он возвращает True , если файл можно прочитать, или False в противном случае.
Метод read() будет читать все содержимое файла как одну строку.
Также, когда вы закончите читать файл, не забудьте закрыть его. Один из способов убедиться, что ваш файл закрыт, – использовать ключевое слово with . Оно закрывает файл автоматически и вам не нужно беспокоиться об этом.
Метод readline() будет считывать только одну строку из файла и возвращать ее.
Метод readlines() прочитает и вернет все строки в файле в виде списка.
Также для чтения содержимого файлов можно использовать цикл for .
Надеемся, вам понравилась эта статья. Желаем удачи в вашем путешествии по миру Python!
Источник: pythonist.ru
Основы работы с файлами в Python
Взаимодействие с файловой системой позволяет хранить информацию, полученную в результате работы программы. Михаил Свинцов из SkillFactory расскажет о базовой функциональности языка программирования Python для работы с файлами.
Встроенные средства Python
Основа для работы с файлами — built-in функция open()
open(file, mode=»rt»)
Эта функция имеет два аргумента. Аргумент file принимает строку, в которой содержится путь к файлу. Второй аргумент, mode , позволяет указать режим, в котором необходимо работать с файлом. По умолчанию этот аргумент принимает значение «rt», с которым, и с некоторыми другими, можно ознакомиться в таблице ниже
Эти режимы могут быть скомбинированы. Например, «rb» открывает двоичный файл для чтения. Комбинируя «r+» или «w+» можно добиться открытия файла в режиме и чтения, и записи одновременно с одним отличием — первый режим вызовет исключение, если файла не существует, а работа во втором режиме в таком случае создаст его.
Начать саму работу с файлом можно с помощью объекта класса io.TextIOWrapper , который возвращается функцией open() . У этого объекта есть несколько атрибутов, через которые можно получить информацию
- name — название файла;
- mode — режим, в котором этот файл открыт;
- closed — возвращает True , если файл был закрыт.
По завершении работы с файлом его необходимо закрыть при помощи метода close()
f = open(«examp.le», «w») // работа с файлом f.close()
Однако более pythonic way стиль работы с файлом встроенными средствами заключается в использовании конструкции with .. as .. , которая работает как менеджер создания контекста. Написанный выше пример можно переписать с ее помощью
with open(«examp.le», «w») as f: // работа с файлом
Главное отличие заключается в том, что python самостоятельно закрывает файл, и разработчику нет необходимости помнить об этом. И бонусом к этому не будут вызваны исключения при открытии файла (например, если файл не существует).
Чтение из файла
При открытии файла в режимах, допускающих чтение, можно использовать несколько подходов.
Работа со строками в Python. Готовимся к собеседованию: вспоминаем азы
Для начала можно прочитать файл целиком и все данные, находящиеся в нем, записать в одну строку.
with open(«examp.le», «r») as f: text = f.read()
Используя эту функцию с целочисленным аргументом, можно прочитать определенное количество символов.
with open(«examp.le», «r») as f: part = f.read(16)
При этом будут получены только первые 16 символов текста. Важно понимать, что при применении этой функции несколько раз подряд будет считываться часть за частью этого текста — виртуальный курсор будет сдвигаться на считанную часть текста. Его можно сдвинуть на определенную позицию, при необходимости воспользовавшись методом seek() .
with open(«examp.le», «r») as f: # ‘Hello, world!’ first_part = f.read(8) # ‘Hello, w’ f.seek(4) second_part = f.read(8) # ‘o, world’
Другой способ заключается в считывании файла построчно. Метод readline() считывает строку и, также как и с методом read() , сдвигает курсор — только теперь уже на целую строку. Применение этого метода несколько раз будет приводить к считыванию нескольких строк.
Схожий с этим способом, другой метод позволяет прочитать файл целиком, но по строкам, записав их в список. Этот список можно использовать, например, в качестве итерируемого объекта в цикле.
with open(«examp.le», «r») as f: for line in f.readlines(): print(line)
Однако и здесь существует более pythonic way. Он заключается в том, что сам объект io.TextIOWrapper имеет итератор, возвращающий строку за строкой. Благодаря этому нет необходимости считывать файл целиком, сохраняя его в список, а можно динамически по строкам считывать файл. И делать это лаконично.
with open(«examp.le», «r») as f: for line in f: print(line)
Запись в файл
Функциональность внесения данных в файл не зависит от режима — добавление данных или перезаписывание файла. В выполнении этой операции также существует несколько подходов.
Самый простой и логичный — использование функции write()
with open(«examp.le», «w») as f: f.write(some_string_data)
Важно, что в качестве аргумента функции могут быть переданы только строки. Если необходимо записать другого рода информацию, то ее необходимо явно привести к строковому типу, используя методы __str__(self) для объектов или форматированные строки.
Data Engineer АО «Гринатом» , Москва , По итогам собеседования
Есть возможность записать в файл большой объем данных, если он может быть представлен в виде списка строк.
with open(«examp.le», «w») as f: f.writelines(list_of_strings)
Здесь есть еще один нюанс, связанный с тем, что функции write() и writelines() автоматически не ставят символ переноса строки, и это разработчику нужно контролировать самостоятельно.
Существует еще один, менее известный, способ, но, возможно, самый удобный из представленных. И как бы не было странно, он заключается в использовании функции print() . Сначала это утверждение может показаться странным, потому что общеизвестно, что с помощью нее происходит вывод в консоль. И это правда. Но если передать в необязательный аргумент file объект типа io.TextIOWrapper , каким и является объект файла, с которым мы работаем, то поток вывода функции print() перенаправляется из консоли в файл.
with open(«examp.le», «w») as f: print(some_data, file=f)
Сила такого подхода заключается в том, что в print() можно передавать не обязательно строковые аргументы — при необходимости функция сама их преобразует к строковому типу.
На этом знакомство с базовой функциональностью работы с файлами можно закончить. Вместе с этим стоит сказать, что возможности языка Python им не ограничивается. Существует большое количество библиотек, которые позволяют работать с файлами определенных типов, а также допускают более тесное взаимодействие с файловой системой. И в совокупности они предоставляют разработчикам легкий и комфортный способ работы с файлами.
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Поделиться
Реклама на Tproger: найдем для вас разработчиков нужного стека и уровня.
Курс «Основы программирования на Python»
Старт 3 июля, 2 месяца, онлайн, от 6664 до 19 990 ₽ в месяц
Курс «Django — разработка веб-приложений»
Старт 10 июля, 3 месяца, онлайн, от 6664 до 19 990 ₽ в месяц
Что думаете?
Комментирую от имени компании
Показать все комментарии
Фотография
Обсуждают сейчас
У вас отличный опыт.
Карьерный путь: из 1C специалиста в Тимлида разработки на Python
5 часов назад
Источник: tproger.ru