Открытие файла python


Файлы. Работа с файлами. | Python 3 для начинающих и чайников

В данной статье мы рассмотрим встроенные средства python для работы с файлами: открытие / закрытие, чтение и запись.

Итак, начнем. Прежде, чем работать с файлом, его надо открыть. С этим замечательно справится встроенная функция open:

f = open('text.txt', 'r')

У функции open много параметров, они указаны в статье "Встроенные функции", нам пока важны 3 аргумента: первый, это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл.

РежимОбозначение
'r'открытие на чтение (является значением по умолчанию).
'w'открытие на запись, содержимое файла удаляется, если файла не существует, создается новый.
'x'открытие на запись, если файла не существует, иначе исключение.
'a'открытие на дозапись, информация добавляется в конец файла.
'b'открытие в двоичном режиме.
't'открытие в текстовом режиме (является значением по умолчанию).
'+'открытие на чтение и запись

Режимы могут быть объединены, то есть, к примеру, 'rb' - чтение в двоичном режиме. По умолчанию режим равен 'rt'.

И последний аргумент, encoding, нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку.

Чтение из файла

Открыли мы файл, а теперь мы хотим прочитать из него информацию. Для этого есть несколько способов, но большого интереса заслуживают лишь два из них.

Первый - метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n).

 >>> f = open('text.txt') >>> f.read(1) 'H' >>> f.read() 'ello world!\nThe end.\n\n'

Ещё один способ сделать это - прочитать файл построчно, воспользовавшись циклом for:

 >>> f = open('text. txt') >>> for line in f: ... line ... 'Hello world!\n' '\n' 'The end.\n' '\n'

Запись в файл

Теперь рассмотрим запись в файл. Попробуем записать в файл вот такой вот список:

 >>> l = [str(i)+str(i-1) for i in range(20)] >>> l ['0-1', '10', '21', '32', '43', '54', '65', '76', '87', '98', '109', '1110', '1211', '1312', '1413', '1514', '1615', '1716', '1817', '1918']

Откроем файл на запись:

 >>> f = open('text.txt', 'w')

Запись в файл осуществляется с помощью метода write:

 >>> for index in l: ... f.write(index + '\n') ... 4 3 3 3 3

Для тех, кто не понял, что это за цифры, поясню: метод write возвращает число записанных символов.

После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:

 >>> f.close()

Теперь попробуем воссоздать этот список из получившегося файла. Откроем файл на чтение (надеюсь, вы поняли, как это сделать?), и прочитаем строки.

 >>> f = open('text.txt', 'r') >>> l = [line.strip() for line in f] >>> l ['0-1', '10', '21', '32', '43', '54', '65', '76', '87', '98', '109', '1110', '1211', '1312', '1413', '1514', '1615', '1716', '1817', '1918'] >>> f.close()

Мы получили тот же список, что и был. В более сложных случаях (словарях, вложенных кортежей и т. д.) алгоритм записи придумать сложнее. Но это и не нужно. В python уже давно придумали средства, такие как pickle или json, позволяющие сохранять в файле сложные структуры.

Для вставки кода на Python в комментарий заключайте его в теги <pre><code>Ваш код</code></pre>

Основы работы с файлами в Python

Михаил Свинцов

автор курса «Full-stack веб-разработчик на 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 самостоятельно закрывает файл, и разработчику нет необходимости помнить об этом. И бонусом к этому не будут вызваны исключения при открытии файла (например, если файл не существует).

Чтение из файла

При открытии файла в режимах, допускающих чтение, можно использовать несколько подходов.

Для начала можно прочитать файл целиком и все данные, находящиеся в нем, записать в одну строку.

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) для объектов или форматированные строки.

Есть возможность записать в файл большой объем данных, если он может быть представлен в виде списка строк.

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 им не ограничивается. Существует большое количество библиотек, которые позволяют работать с файлами определенных типов, а также допускают более тесное взаимодействие с файловой системой. И в совокупности они предоставляют разработчикам легкий и комфортный способ работы с файлами.

Открыть файл Python

❮ Назад Далее ❯


Открыть файл на сервере

Предположим, у нас есть следующий файл, расположенный в той же папке, что и Python:

demofile. txt

Здравствуйте! Добро пожаловать в demofile.txt
Этот файл предназначен для тестирования.
Хорошо Удача!

Чтобы открыть файл, используйте встроенную функцию open() .

Функция open() возвращает файловый объект, который имеет read() метод чтения содержимого файла:

Пример

f = open("demofile.txt", "r")
print(f.read())

Выполнить пример »

Если файл находится в другом месте, вам нужно указать путь к файлу, например:

Пример

Открыть файл в другом месте:

f = open("D:\\myfiles\welcome.txt", "r")
print(f.read())

Выполнить Пример »


Части файла только для чтения

По умолчанию метод read() возвращает весь текст, но вы также можете указать, сколько символов вы хотите вернуть:

Пример

Вернуть 5 первых символов файла:

f = open("demofile. txt", "r")
print(f.read( 5 ))

Выполнить Пример »



Чтение строк

Вы можете вернуть одну строку с помощью метода readline() :

Пример

Прочитать одну строку файла:

f = open("demofile.txt", "r")
print (f.readline())

Пример запуска »

Путем вызова readline() два раза, вы можете прочитать две первые строки:

Пример

Прочитать две строки файла:

f = open("demofile.txt", "r")
print(f.readline())
print(f.readline())

Пример выполнения »

Перебирая строки файла, вы можете прочитать весь файл, строка за строкой:

Пример

Пройтись по файлу строка за строкой:

f = open("demofile.txt ", "r")
для x в f:
  print(x)

Пример запуска »


Закрыть файлы

Рекомендуется всегда закрывать файл после завершения работы с ним.

Пример

Закройте файл, когда закончите с ним:

f = open("demofile.txt", "r")
print(f.readline())
f.close()

Пример запуска »

Примечание: Всегда следует закрывать файлы, в некоторых случаях из-за буферизации изменения, внесенные в файл, могут не отображаться, пока вы не закроете файл.


❮ Предыдущий Далее ❯


ВЫБОР ЦВЕТА



Лучшие учебники
Учебник по HTML
Учебник по CSS
Учебник по JavaScript
Учебник How To
Учебник по SQL
Учебник по Python
Учебник по W3.CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery

9003 900 Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery

Лучшие примеры
Примеры HTML
Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3. CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery

FORUM | О

W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания. Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования, куки-файлы и политика конфиденциальности.

Copyright 1999-2022 Refsnes Data. Все права защищены.
W3Schools работает на основе W3.CSS.

Чтение и запись файлов в Python

В этом руководстве вы узнаете о файловых операциях Python. В частности, открытие файла, чтение из него, запись в него, закрытие и различные методы работы с файлами, о которых вам следует знать.

Файлы

Файлы — это именованные места на диске для хранения связанной информации. Они используются для постоянного хранения данных в энергонезависимой памяти (например, на жестком диске).

Поскольку оперативная память (ОЗУ) является энергозависимой (которая теряет свои данные при выключении компьютера), мы используем файлы для будущего использования данных, сохраняя их постоянно.

Когда мы хотим прочитать файл или записать в него, нам нужно сначала его открыть. Когда мы закончим, его нужно закрыть, чтобы освободить ресурсы, которые завязаны с файлом.

Следовательно, в Python файловая операция выполняется в следующем порядке:

  1. Открыть файл
  2. Чтение или запись (выполнение операции)
  3. Закрыть файл

Открытие файлов в Python

Python имеет встроенную функцию open() для открытия файла. Эта функция возвращает файловый объект, также называемый дескриптором, поскольку он используется для чтения или изменения файла соответствующим образом.

 >>> f = open("test.txt") # открыть файл в текущем каталоге >>> f = open("C:/Python38/README. txt") # указание полного пути 

Мы можем указать режим при открытии файла. В режиме мы указываем, хотим ли мы прочитать r , записать w или добавить a в файл. Мы также можем указать, хотим ли мы открыть файл в текстовом или двоичном режиме.

По умолчанию чтение в текстовом режиме. В этом режиме мы получаем строки при чтении из файла.

С другой стороны, двоичный режим возвращает байты, и этот режим следует использовать при работе с нетекстовыми файлами, такими как изображения или исполняемые файлы.

Режим Описание
р Открывает файл для чтения. (по умолчанию)
ш Открывает файл для записи. Создает новый файл, если он не существует, или усекает файл, если он существует.
х Открывает файл для монопольного создания. Если файл уже существует, операция завершится ошибкой.
и Открывает файл для добавления в конец файла без его усечения. Создает новый файл, если он не существует.
т Открывается в текстовом режиме. (по умолчанию)
б Открывается в двоичном режиме.
+ Открывает файл для обновления (чтения и записи)
 f = open("test.txt") # эквивалентно 'r' или 'rt' f = open("test.txt",'w') # запись в текстовом режиме f = open("img.bmp",'r+b') # чтение и запись в двоичном режиме 

В отличие от других языков, символ a не подразумевает число 97, пока он не будет закодирован с использованием ASCII (или другие эквивалентные кодировки).

Более того, кодировка по умолчанию зависит от платформы. В винде cp1252 , но utf-8 в Linux.

Таким образом, мы не должны также полагаться на кодировку по умолчанию, иначе наш код будет вести себя по-разному на разных платформах.

Поэтому при работе с файлами в текстовом режиме настоятельно рекомендуется указывать тип кодировки.

 f = open("test.txt", mode='r', encoding='utf-8') 

Закрытие файлов в Python

Когда мы закончим выполнение операций над файлом, нам нужно правильно закрыть файл.

Закрытие файла освобождает ресурсы, которые были связаны с файлом. Это делается с помощью метода close() , доступного в Python.

В Python есть сборщик мусора для очистки объектов, на которые нет ссылок, но мы не должны полагаться на него при закрытии файла.

 f = открыть ("test.txt", кодировка = 'utf-8') # выполняем файловые операции f.close() 

Этот метод не совсем безопасен. Если возникает исключение, когда мы выполняем какую-либо операцию с файлом, код завершает работу, не закрывая файл.

Безопаснее использовать блок try...finally.

 попробуйте: f = открыть ("test.txt", кодировка = 'utf-8') # выполняем файловые операции Ну наконец то: f. close() 

Таким образом, мы гарантируем правильное закрытие файла, даже если возникает исключение, которое приводит к остановке выполнения программы.

Лучший способ закрыть файл — использовать оператор with . Это гарантирует, что файл будет закрыт при выходе из блока внутри оператора with .

Нам не нужно явно вызывать метод close() . Это делается внутри.

 с открытым ("test.txt", encoding = 'utf-8') как f: # выполнить операции с файлами 

Запись в файлы на Python

Чтобы записать в файл на Python, нам нужно открыть его в режиме записи w , добавить в или в эксклюзивном режиме создания x .

Нам нужно быть осторожными с режимом w , так как он перезапишет файл, если он уже существует. Благодаря этому все предыдущие данные стираются.

Запись строки или последовательности байтов (для двоичных файлов) выполняется с помощью метода write() . Этот метод возвращает количество символов, записанных в файл.

 с open("test.txt",'w',encoding = 'utf-8') как f: f.write("мой первый файл\n") f.write("Этот файл\n\n") f.write("содержит три строки\n") 

Эта программа создаст новый файл с именем test.txt в текущем каталоге, если он не существует. Если он существует, он перезаписывается.

Мы должны сами включать символы новой строки, чтобы различать разные строки.


Чтение файлов в Python

Чтобы прочитать файл в Python, мы должны открыть файл в режиме чтения r .

Для этой цели доступны различные методы. Мы можем использовать метод read(size) для чтения size числа данных. Если параметр размер не указан, он считывает и возвращает до конца файла.

Мы можем прочитать файл text.txt , который мы написали в предыдущем разделе, следующим образом:

 >>> f = open("test.txt",'r',encoding = 'utf-8') >>> f. read(4) # прочитать первые 4 данных 'Этот' >>> f.read(4) # прочитать следующие 4 данных ' является ' >>> f.read() # прочитать остаток до конца файла 'мой первый файл\nЭтот файл\nсодержит три строки\n' >>> f.read() # дальнейшее чтение возвращает пустую строку '' 

Мы видим, что Метод read() возвращает новую строку как '\n' . Как только конец файла достигнут, мы получаем пустую строку при дальнейшем чтении.

Мы можем изменить текущий файловый курсор (положение), используя метод seek() . Точно так же метод tell() возвращает нашу текущую позицию (в байтах).

 >>> f.tell() # получить текущую позицию в файле 56 >>> f.seek(0) # установить файловый курсор в исходное положение 0 >>> print(f.read()) # прочитать весь файл это мой первый файл Этот файл состоит из трех строк 

Мы можем читать файл построчно, используя цикл for. Это и эффективно, и быстро.

 >>> для строки в f: ... печать (строка, конец = '') . .. это мой первый файл Этот файл содержит три строки 

В этой программе строки в самом файле содержат символ новой строки \n . Итак, мы используем конечный параметр функции print() , чтобы избежать двух новых строк при печати.

Кроме того, мы можем использовать метод readline() для чтения отдельных строк файла. Этот метод читает файл до новой строки, включая символ новой строки.

 >>> f.readline() 'Это мой первый файл\n' >>> f.readline() 'Этот файл\n' >>> f.readline() 'содержит три строки\n' >>> f.readline() '' 

Наконец, метод readlines() возвращает список оставшихся строк всего файла. Все эти методы чтения возвращают пустые значения при достижении конца файла (EOF).

 >>> f.readlines() ['Это мой первый файл\n', 'Этот файл\n', 'содержит три строки\n'] 

Файловые методы Python

Существуют различные методы, доступные с файловым объектом. Некоторые из них использовались в приведенных выше примерах.

Вот полный список методов в текстовом режиме с кратким описанием:

Метод Описание
закрыть() Закрывает открытый файл. Это не имеет никакого эффекта, если файл уже закрыт.
отсоединить() Отделяет базовый двоичный буфер от TextIOBase и возвращает его.
файлно() Возвращает целое число (дескриптор файла) файла.
смыв() Очищает буфер записи файлового потока.
isatty() Возвращает True , если файловый поток является интерактивным.
читать( n ) Читает не более n символов из файла. Читает до конца файла, если он отрицательный или Нет .
читаемый() Возвращает True , если файловый поток доступен для чтения.
readline( n =-1) Читает и возвращает одну строку из файла. Считывает не более n байт, если указано.
строки чтения( n =-1) Читает и возвращает список строк из файла. Считывает не более n байт/символов, если указано.
поиск ( смещение , из = SEEK_SET ) Изменяет позицию файла на со смещением байт относительно из (начало, текущий, конец).
поиск() Возвращает True , если файловый поток поддерживает произвольный доступ.
рассказать() Возвращает целое число, представляющее текущую позицию объекта файла.
усечь (размер = Нет ) Изменяет размер файлового потока до размера байт. Если размер не указан, размер изменяется до текущего местоположения.
запись () Возвращает True , если файловый поток может быть записан.

Learn more

Только новые статьи

Введите свой e-mail

Видео-курс

Blender для новичков

Ваше имя:Ваш E-Mail: