Осваиваем Python 3 — работа с файлами
В этой статье мы рассмотрим операции с файлами в Python. Открытие файла Python. Чтение из файла Python. Запись в файл Python, закрытие файла. А также методы, предназначенные для работы с файлами.
Обновлено: 2023-06-03 19:55:34 Сергей Бензенко автор материала
Работа с файлами питон — что такое файл Python?
Файл – это именованная область диска, предназначенная для длительного хранения данных в постоянной памяти (например, на жёстком диске).
Чтобы прочитать или записать данные в файл, сначала нужно его открыть. После окончания работы файл необходимо закрыть, чтобы освободить связанные с ним ресурсы.
Поэтому в Python операции с файлами выполняются в следующем порядке:
- Открытие файла Python.
- Чтение из файла Python или запись в файл Python (выполнение операции).
- Закрытие файла Python.
Открытие файла Python
Не знаете как открыть файл в питоне? В Python есть встроенная функция open(), предназначенная для открытия файла. Она возвращает объект, который используется для чтения или изменения файла.
>>> f = open("test.txt") # открыть файл в текущей папке >>> f = open("C:/Python33/README.txt") # указание полного пути
При этом можно указать необходимый режим открытия файла: ‘r’- для чтения,’w’ — для записи,’a’ — для изменения. Мы также можем указать, хотим ли открыть файл в текстовом или в бинарном формате.
По умолчанию файл открывается для чтения в текстовом режиме. При чтении файла в этом режиме мы получаем строки.
В бинарном формате мы получим байты. Этот режим используется для чтения не текстовых файлов, таких как изображения или exe-файлы.
| Открытие файла Python- возможные режимы | |
| Режим | Описание |
| ‘r’ | Открытие файла для чтения. Режим используется по умолчанию. |
| ‘w’ | Открытие файла для записи. Режим создаёт новый файл, если он не существует, или стирает содержимое существующего. |
| ‘x’ | Открытие файла для записи. Если файл существует, операция заканчивается неудачей (исключением). |
| ‘a’ | Открытие файла для добавления данных в конец файла без очистки его содержимого. Этот режим создаёт новый файл, если он не существует. |
| ‘t’ | Открытие файла в текстовом формате. Этот режим используется по умолчанию. |
| ‘b’ | Открытие файла в бинарном формате. |
| ‘+’ | Открытие файла для обновления (чтения и записи). |
f = open("test.txt") # эквивалент 'r' или 'rt' f = open("test.txt",'w') # запись в текстовом режиме f = open("img.bmp",'r+b') # чтение и запись в бинарном формате
В отличие от других языков программирования, в Python символ ‘a’ не подразумевает число 97, если оно не закодировано в ASCII (или другой эквивалентной кодировке).
Кодировка по умолчанию зависит от платформы. В Windows – это ‘cp1252’, а в Linux ‘utf-8’.
Поэтому мы не должны полагаться на кодировку по умолчанию. При работе с файлами в текстовом формате рекомендуется указывать тип кодировки.
f = open("test.txt",mode = 'r',encoding = 'utf-8')
Как закрыть файл в Python?
Закрытие освободит ресурсы, которые были связаны с файлом. Это делается с помощью метода close(), встроенного в язык программирования Python.
В Python есть сборщик мусора, предназначенный для очистки ненужных объектов, Но нельзя полагаться на него при закрытии файлов.
f = open("test.txt",encoding = 'utf-8') # выполнение операций с файлом f.close()
Этот метод не полностью безопасен. Если при операции возникает исключение, выполнение будет прервано без закрытия файла.
Более безопасный способ – использование блока try. finally.
try: f = open("test.txt",encoding = 'utf-8') # выполнение операций с файлом finally: f.close()
Это гарантирует правильное закрытие файла даже после возникновения исключения, прерывающего выполнения программы.
Также для закрытия файла можно использовать конструкцию with. Оно гарантирует, что файл будет закрыт при выходе из блока with. При этом не нужно явно вызывать метод close(). Это будет сделано автоматически.
with open("test.txt",encoding = 'utf-8') as f: # выполнение операций с файлом
Запись в файл Python
Чтобы записать данные в файл в Python, нужно открыть его в режиме ‘w’, ‘a’ или ‘x’. Но будьте осторожны с режимом ‘w’. Он перезаписывает файл, если то уже существует. Все данные в этом случае стираются.
Запись строки или последовательности байтов (для бинарных файлов) осуществляется методом write(). Он возвращает количество символов, записанных в файл.
with open("test.txt",'w',encoding = 'utf-8') as f: f.write("my first filen") f.write("This filenn") f.write("contains three linesn")
Эта программа создаст новый файл ‘test.txt’. Если он существует, данные файла будут перезаписаны. При этом нужно добавлять символы новой строки самостоятельно, чтобы разделять строки.
Чтение из файла Python
Чтобы осуществить чтение из файла Python, нужно открыть его в режиме чтения. Для этого можно использовать метод read(size), чтобы прочитать из файла данные в количестве, указанном в параметре size. Если параметр size не указан, метод читает и возвращает данные до конца файла.
>>> f = open("test.txt",'r',encoding = 'utf-8') >>> f.read(4) # чтение первых 4 символов 'This' >>> f.read(4) # чтение следующих 4 символов ' is ' >>> f.read() # чтение остальных данных до конца файла 'my first filenThis filencontains three linesn' >>> f.read() # дальнейшие попытки чтения возвращают пустую строку ''
Метод read() возвращает новые строки как ‘n’. Когда будет достигнут конец файла, при дальнейших попытках чтения мы получим пустые строки.
Чтобы изменить позицию курсора в текущем файле, используется метод seek(). Метод tell() возвращает текущую позицию курсора (в виде количества байтов).
>>> f.tell() # получаем текущую позицию курсора в файле 56 >>> f.seek(0) # возвращаем курсор в начальную позицию 0 >>> print(f.read()) # читаем весь файл This is my first file This file contains three lines
Мы можем прочитать файл построчно в цикле for.
>>> for line in f: . print(line, end = '') . This is my first file This file contains three lines
Извлекаемые из файла строки включают в себя символ новой строки ‘n’. Чтобы избежать вывода, используем пустой параметр end метода print(),.
Также можно использовать метод readline(), чтобы извлекать отдельные строки. Он читает файл до символа новой строки.
>>> f.readline() 'This is my first filen' >>> f.readline() 'This filen' >>> f.readline() 'contains three linesn' >>> f.readline() ''
Метод readlines() возвращает список оставшихся строк. Все эти методы чтения возвращают пустую строку, когда достигается конец файла.
>>> f.readlines() ['This is my first filen', 'This filen', 'contains three linesn']
Python работа с файлами — основные методы
Ниже приводится полный список методов для работы с файлами в текстовом режиме.
| Python работа с файлами — методы | |
| Метод | Описание |
| close() | Закрытие файла. Не делает ничего, если файл закрыт. |
| detach() | Отделяет бинарный буфер от TextIOBase и возвращает его. |
| fileno() | Возвращает целочисленный дескриптор файла. |
| flush() | Вызывает сброс данных (запись на диск) из буфера записи файлового потока. |
| isatty() | Возвращает значение True, если файловый поток интерактивный. |
| read(n) | Читает максимум n символов из файла. Читает до конца файла, если значение отрицательное или None. |
| readable() | Возвращает значение True, если из файлового потока можно осуществить чтение. |
| readline(n=-1) | Читает и возвращает одну строку из файла. Читает максимум n байт, если указано соответствующее значение. |
| readlines(n=-1) | Читает и возвращает список строк из файла. Читает максимум n байт/символов, если указано соответствующее значение. |
| seek(offset,from=SEEK_SET) | Изменяет позицию курсора. |
| seekable() | Возвращает значение True, если файловый поток поддерживает случайный доступ. |
| tell() | Возвращает текущую позицию курсора в файле. |
| truncate(size=None) | Изменяет размер файлового потока до size байт. Если значение size не указано, размер изменяется до текущего положения курсора. |
| writable() | Возвращает значение True, если в файловый поток может производиться запись. |
| write(s) | Записывает строки s в файл и возвращает количество записанных символов. |
| writelines(lines) | Записывает список строк lines в файл. |
С помощью какого метода можно получить файл из Интернета? [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 1 год назад .
С помощью какого метода можно получить файл из Интернета?
Отслеживать
задан 16 янв 2023 в 12:50
7 2 2 бронзовых знака
16 янв 2023 в 12:54
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
import requests # импорт библиотеки req = requests.get('https://ru.stackoverflow.com/questions') # делаем запрос используя метод GET with open('ru-stackoverflow-questions.html', 'wb') as file: # открытие файла file.write(req.content) # запись в файл print('Файл успешно записан')
Отслеживать
ответ дан 16 янв 2023 в 13:12
762 1 1 золотой знак 3 3 серебряных знака 12 12 бронзовых знаков
- python
- request
-
Важное на Мете
Похожие
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.26.3951
Доступ в Интернет на Python с использованием Urllib.Request и urlopen()
urllib — это модуль Python, который можно использовать для открытия URL-адресов. Он определяет функции и классы, помогающие выполнять действия с URL-адресами.
С помощью Python вы также можете получать доступ и извлекать данные из Интернета, такие как XML, HTML, JSON и т. д. Вы также можете использовать Python для непосредственной работы с этими данными. В этом уроке мы увидим, как можно получить данные из Интернета. Например, здесь мы использовали URL-адрес видео guru99, и мы собираемся получить доступ к этому URL-адресу видео с помощью Python, а также распечатать HTML-файл этого URL-адреса.
Как открыть URL-адрес с помощью Urllib
Прежде чем запустить код для подключения к данным Интернета, нам необходимо импортировать оператор для модуля библиотеки URL-адресов или «urllib».

- Импортировать urllib
- Определите свою основную функцию
- Объявите переменную webUrl
- Затем вызовите функцию urlopen в библиотеке URL-библиотеки.
- URL-адрес, который мы открываем, представляет собой руководство guru99 по youtube
- Далее мы распечатаем код результата
- Код результата получается путем вызова функции getcode для созданной нами переменной webUrl.
- Мы собираемся преобразовать это в строку, чтобы ее можно было объединить с нашей строкой «код результата».
- Это будет обычный HTTP-код «200», указывающий, что HTTP-запрос успешно обработан.
Как получить URL-адрес формы HTML-файла в Python
Вы также можете прочитать HTML-файл с помощью «функции чтения» в Python, и когда вы запустите код, HTML-файл появится в консоли.

- Вызовите функцию чтения переменной webURL.
- Переменная чтения позволяет читать содержимое файлов данных.
- Считайте все содержимое URL-адреса в переменную с именем data.
- Запустите код. Он распечатает данные в формате HTML.
Пример Python 2
# # read the data from the URL and print it # import urllib2 def main(): # open a connection to a URL using urllib2 webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com") #get the result code and print it print "result code: " + str(webUrl.getcode()) # read the data from the URL and print it data = webUrl.read() print data if __name__ == "__main__": main()
Пример Python 3
# # read the data from the URL and print it # import urllib.request # open a connection to a URL using urllib webUrl = urllib.request.urlopen('https://www.youtube.com/user/guru99com') #get the result code and print it print ("result code: " + str(webUrl.getcode())) # read the data from the URL and print it data = webUrl.read() print (data)
- Онлайн-компилятор Python (редактор/интерпретатор/IDE) для запуска кода
- Учебное пособие по PyUnit: Платформа модульного тестирования Python (с примером)
- Как установить Python в Windows [Pycharm IDE]
- Hello World: создайте свою первую программу на Python
- Переменные Python: как определить/объявить типы строковых переменных
- Строки Python: замена, объединение, разделение, реверс, верхний и нижний регистр
- Python TUPLE – упаковка, распаковка, сравнение, нарезка, удаление, ключ
- Словарь на Python с синтаксисом и примером
Функция open. Чтение данных из файла
На этом занятии мы с вами научимся читать данные из файлов. Думаю, вы все прекрасно понимаете, что такое файлы и что они хранятся, как правило, на внешних носителях. (Часто – это жесткий диск устройства или флеш-память или SSD-диск. Бывают и другие носители). Главная особенность файлов – сохранение информации после отключения устройства от питания.
Начнем со знакомства с функцией:
open(file [, mode=’r’, encoding=None, …])

которая открывает указанный файл на чтение или запись данных (по умолчанию – на чтение). Основные ее параметры, следующие:
- file – путь к файлу (вместе с его именем);
- mode – режим доступа к файлу (чтение/запись);
- encoding – кодировка файла.
Чтобы воспользоваться этой функцией, нужно правильно записать первый аргумент – путь к файлу. Давайте, посмотрим различные варианты его определения. Представим, что наш файл ex1.py находится в рабочем каталоге app: Тогда, чтобы обратиться к файлу my_file.txt путь можно записать просто, как: «my_file.txt» или «d:\\app\\my_file.txt» или так: «d:/app/my_file.txt» Последние два варианта представляют собой абсолютный путь к файлу, то есть, полный путь, начиная с указания диска. Причем, обычно используют обратный слеш в качестве разделителя: так короче писать и такой путь будет корректно восприниматься как под ОС Windows, так и Linux. Первый же вариант – это относительный путь (относительно каталога с исполняемым файлом). Теперь, предположим, что мы хотим обратиться к файлу img.txt. Это можно сделать так: «images/img.txt» или так: «d:/app/images/img.txt» Для доступа к out.txt пути будут записаны так: «../out.txt»
«d:/out.txt» Обратите внимание, здесь две точки означают переход к родительскому каталогу, то есть, выход из каталога app на один уровень вверх. И, наконец, для доступа к файлу prt.dat пути запишутся так: «../parent/prt.dat»
«d:/ parent/prt.dat» Вот принцип, по которому прописываются пути к файлам. В нашем случае мы имеем текстовый файл «my_file.txt», который находится в том же каталоге, что и программа ex1.py, поэтому путь можно записать, просто указав имя файла:
file = open("my_file.txt")
В результате переменная file будет ссылаться на файловый объект, через который и происходит работа с файлами. Если указать неверный путь, например, так:
file = open("my_file2.txt")
то возникнет ошибка FileNotFoundError. Поэтому пути нужно прописывать аккуратно. Позже мы увидим, как можно избежать такой ошибки, чтобы программа не прерывалась при неверно указанном файле. Итак, функция open() по умолчанию открывает файл на чтение. Это значит, что в этом режиме мы можем только считывать информацию из файла, но не записывать. Как прочитать данные из файла? Для этого существует несколько методов у файлового объекта. Например, если выполнить метод:
print( file.read() )
то будет прочитан весь файл целиком и результат представлен в виде строки. Но сейчас мы видим с вами в консоли отображаются какие-то кракозябры. Почему? Все дело в несовпадении кодировок. В моем случае метод read() читает данные в кодировке windows-1251, а кодировка файла с текстом – UTF-8. Чтобы это поправить, в функции open() нужно явно указать кодировку файла через именованный аргумент encoding:
file = open("myfile.txt", encoding="utf-8" )
Теперь все работает корректно. Но, что если нам нужно прочитать из файла всего несколько символов? Для этого достаточно вызвать метод read() и первым аргументом указать максимальное количество читаемых символов, например:
print( file.read(4) )

Из файла будут считаны первые четыре символа. Правда, в консоли мы видим только три символа. Дело в том, что при кодировке UTF-8 в файл автоматически добавляется первый (невидимый) символ с шестнадцатиричным кодом: #FEFF Если мы снова вызовем метод:
print( file.read(4) )
то будут прочитаны следующие четыре символа. Вот эта стрелка (на рисунке) называется файловой позицией (file position), которая указывает, с какого места производить последующее считывание информации. Благодаря ей мы можем последовательно читать данные, просто вызывая метод read(). Когда доходим до конца файла, то здесь находится специальный символ EOF, означающий конец файла. При необходимости, мы можем управлять положением файловой позиции. Для этого существует специальный метод: file.seek(offset[, from_what]) Например, вот такая запись:
file.seek(0)
будет означать, что мы устанавливаем позицию в начало и тогда такие строчки:
print( file.read(4) ) file.seek(0) print( file.read(4) )
будут считывать одни и те же первые символы. Если же мы хотим узнать текущую позицию в файле, то следует вызвать метод tell:
pos = file.tell() print( pos )
Следующий полезный метод readline() позволяет построчно считывать информацию из текстового файла:
s = file.readline() print( s )
Здесь концом строки считается символ переноса ‘\n’, либо конец файла. Причем, этот спецсимвол переноса будет также присутствовать в строке. Мы в этом можем убедиться, вызвав дважды функцию:
print( file.readline() ) print( file.readline() )
Здесь в консоли строчки будут разделены пустой строкой. Это как раз из-за того, что один перенос идет из прочитанной строки, а второй добавляется самой функцией print(). Поэтому, если их записать вот так:
print( file.readline(), end="" ) print( file.readline(), end="" )
то вывод будет построчным с одним переносом. Если нам нужно последовательно прочитать все строчки из файла, то для этого обычно используют цикл for следующим образом:
for line in file: print( line, end="" )
Этот пример показывает, что объект файл является итерируемым и на каждой итерации возвращает очередную строку. Или же, все строчки можно прочитать методом:
s = file.readlines()
и тогда переменная s будет ссылаться на список с этими строками:
print( s )
Однако этот метод следует использовать с осторожностью, т.к. для больших файлов может возникнуть ошибка нехватки памяти для хранения полученного списка. По сути это все методы для считывания информации из файла. Осталось только добавить, что как только мы завершаем работу с файлом, его следует закрыть. Для этого используется метод close:
file.close()