Как создать и записать в файл python
Перейти к содержимому

Как создать и записать в файл python

  • автор:

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

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

Обновлено: 2023-05-29 17:39:08 Вадим Дворников автор материала

Работа с текстовыми файлами Python 3 -исходные ресурсы

Для этого руководства нужно установить Python 3. Также на вашем компьютере должна быть установлена локальная среда программирования.

Основа

Python может с относительной легкостью обрабатывать различные форматы файлов:

Тип файла Описание
Txt Обычный текстовый файл хранит данные, которые представляют собой только символы (или строки) и не включает в себя структурированные метаданные.
CSV Файл со значениями,для разделения которых используются запятые (или другие разделители). Что позволяет сохранять данные в формате таблицы.
HTML HTML-файл хранит структурированные данные и используется большинством сайтов
JSON JavaScript Object Notation — простой и эффективный формат, что делает его одним из часто используемых для хранения и передачи данных.

В этой статье основное внимание будет уделено формату txt.

Шаг 1 — Создание текстового файла

Сначала нужно подготовить файл для работы. Для этого мы откроем любой текстовый редактор для python и создадим новый txt-файл, назовем его days.txt.
В этом файле необходимо ввести несколько строк. В приведенном ниже примере мы перечислим дни недели:

Monday Tuesday Wednesday Thursday Friday Saturday Sunday

Затем сохраните файл. В нашем примере пользователь sammy сохранил файл здесь: /users/sammy/days.txt . Это будет важно на последующих этапах, когда откроем файл в Python.

Шаг 2 — Открытие файла

Прежде чем написать программу, нужно создать файл для кода Python. С помощью текстового редактора создадим файл files.py. Чтобы упростить задачу, сохраните его в том же каталоге, что и файл days.txt:

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

Чтобы Python мог открыть файл, ему требуется путь к нему: days.txt -/users/sammy/days.txt . Затем создаем строковую переменную для хранения этой информации. В нашем скрипте files.py мы создадим переменную path и установим для нее значение days.txt .

path = '/users/sammy/days.txt'

Затем используем функцию Python open(), чтобы открыть файл days.txt . В качестве первого аргумента она принимает путь к файлу.

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

Вот некоторые из существующих режимов:

  • ‘r’: использовать для чтения;
  • ‘w’: использовать для записи;
  • ‘x’: использование для создания и записи в новый файл;
  • ‘a’: использование для добавления к файлу;
  • ‘r +’: использовать для чтения и записи в тот же файл.

В текущем примере нужно только считать данные из файла, поэтому будем использовать режим «r». Применим функцию open() , чтобы открыть файл days.txt и назначить его переменной days_file .

days_file = open(path,'r')

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

Загрузить данные в программу из файла, выгрузить данные в файл, записывать историю обращений к программе в специальный файл — всё это очень частые задачи.

Как открыть файл

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

my_file = open("myfile.txt", "r") file_contents = my_file.read() my_file.close() 
  • Функция open() принимает на вход 2 аргумента: путь до файла и права, с которыми его открыть. r — от read , т.е. мы просим открыть файл в режиме чтения.
  • Функция open() возвращает не текст в файле, а сам файл. Файл как бы теперь открыт, как если вы бы щёлкнули по нему дважды левой клавишей.
  • Метод файла .read() позволяет читать данные из файла. Строка с содержимым файла запишется в переменную file_contents .
  • Метод .close закрывает файл.

Как сделать правильно

Закрывать файлы важно по двум причинам:

  1. Чтобы читать и писать в один и тот же файл из разных мест программы.
  2. Чтобы не превысить лимиты операционной системы. У неё есть ограничение на число одновременно открытых файлов. Ограничение легко превысить, если открывать файлы в цикле.

Однажды вы точно забудете закрыть файл. В Python есть специальная команда на такой случай — with :

with open("myfile.txt", "r") as my_file: file_contents = my_file.read() print(file_contents) 

Выглядит немного непривычно, но суть простая: всё, что лежит “внутри” блока with (т.е. с отступом от него) — делается с открытым файлом. Как только файл не нужен, вы убираете отступ и файл сам закроется.

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

Допустим, рядом c вашим файлом main.py , из которого вы запускаете код, лежит папка files . В этой папке лежит файл file.txt :

. ├── files │ └── file.txt └── main.py 

Вам очень нужно открыть файл file.txt , но он спрятался в папке, что же делать? Вот как его открыть:

with open("files/file.txt", "r") as my_file: file_contents = my_file.read() print(file_contents) 

Ошибки кодировки

Бывает, что вы знаете, что файл в порядке, но Python читает его со странными символами: ������. Дело в кодировках: одни программы пользуют CP1251, другие ASCII, третьи UTF-8. К сожалению, программистам до сих пор не получилось окончательно перейти к какому-то одному варианту.

Чтобы открыть файл с нужной кодировкой, нужно передать функции open именованный аргумент encoding :

with open("myfile.txt", "r", encoding="ваша кодировка") as my_file: # . 

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

Запись в файл

Для записи в файл нужно лишь указать режим w (write) и использовать не .read() , а .write() :

my_text = "Хочу записать эту строку в файл" with open("myfile.txt", "w") as my_file: my_file.write(my_text) 

Альтернативные статьи

  • Python World: работа с файлами
  • Python Scripts: работа с файлами

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

Чтение данных из файла и запись в файл

В Python, чтобы создать файл, надо его открыть в режиме записи ( ‘w’ , ‘wb’ ) или дозаписи ( ‘a’ , ‘ab’ ).

f2 = open("text2.txt", 'w')

Функция open() возвращает файловый объект.

Без ‘b’ создается текстовый файл, представляющий собой поток символов. С ‘b’ — файл, содержащий поток байтов.

В Python также существует режим ‘x’ или ‘xb’ . В этом режиме проверяется, есть ли файл. Если файл с определенным именем уже существует, он не будет создан. В режиме ‘w’ файл создается заново, старый при этом теряется.

>>> f1 = open('text1.txt', 'w') >>> f2 = open('text1.txt', 'x') Traceback (most recent call last): File "", line 1, in FileExistsError: [Errno 17] File exists: 'text1.txt' >>> f3 = open('text1.txt', 'w')

Чтение данных из файла

Если в функцию open() не передается второй аргумент, файл расценивается как текстовый и открывается на чтение.

Попытка открыть на чтение несуществующий файл вызывает ошибку.

>>> f = open("text10.txt") Traceback (most recent call last): File "", line 1, in IOError: [Errno 2] No such file or directory: 'text10.txt'

Перехватить возникшее исключение можно с помощью конструкции try-except .

>>> try: . f = open("text10.txt") . except IOError: . print ("No file") . No file

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

>>> f = open("text.txt") >>> f >>> fd = f.read() >>> fd1 = f.read() >>> fd 'Hello\n\tOne\n Two\nThree Four\nШесть!\n' >>> fd1 ''

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

>>> f = open('text.txt', 'rb') >>> content = f.read() >>> type(content) >>> content b'HelloHello' >>> content[0] 72 >>> chr(content[0]) 'H'

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

>>> f = open("text.txt") >>> fd = f.read(10) >>> fd1 = f.read(5) >>> fd 'Hello\n\tOne' >>> fd1 '\n T'

Метод readline() позволяет получать данные построчно.

>>> f = open("text.txt") >>> f.readline() 'Hello\n' >>> f.readline() '\tOne\n' >>> f.readline() ' Two\n'

Принимает аргумент — число байт или символов.

>>> f.readline(3) 'Thr' >>> f.readline(3) 'ee ' >>> f.readline(3) 'Fou' >>> f.readline(3) 'r\n' >>> f.readline(5) 'Шесть' >>> f.readline(5) '!\n'

Для построчного чтения данных из файла рекомендуется использовать цикл for :

>>> f = open('text.txt') >>> for line in f: . print(line, end='') . Hello! The second line. >>> f.close()

Метод readlines() считывает все строки и помещает их в список.

>>> f = open("text.txt") >>> fd = f.readlines() >>> fd ['Hello\n', '\tOne\n', ' Two\n', 'Three Four\n', 'Шесть!\n']

Может принимать количество символов, но дочитывает строку до конца.

>>> f = open("text.txt") >>> fd = f.readlines(3) >>> fd ['Hello\n'] >>> fd1 = f.readlines(6) >>> fd1 ['\tOne\n', ' Two\n']

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

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

>>> ft = open('text1.txt', 'w') >>> fb = open('text2.txt', 'wb') >>> t = 'Привет Мир!' >>> b = b'Hello World!' >>> type(t), type(b) (, ) >>> ft.write(t) 11 >>> fb.write(b) 12 >>> ft.close() >>> fb.close() >>> >>> import os.path >>> os.path.getsize('text1.txt') 20 >>> os.path.getsize('text2.txt') 12 >>> open('text2.txt').read() 'Hello World!'

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

>>> a = [1, 2, 3, 4] >>> sa = str(a) >>> sa '[1, 2, 3, 4]' >>> f = open('mylist.txt', 'w') >>> f.write(sa) 12 >>> f.close() >>> >>> with open('mylist.txt') as f: . sa = f.read() . >>> sa '[1, 2, 3, 4]' >>> list(sa) # bad idea ['[', '1', ',', ' ', '2', ',', ' ', '3', ',', ' ', '4', ']'] >>> a = [int(i) for i in sa if i.isdigit()] >>> a [1, 2, 3, 4]

С помощью метода writelines() можно записать в файл итерируемую последовательность.

>>> a = [1,2,3,4,5,6,7,8,9,0] >>> f = open("text2.txt",'w') >>> f.writelines("%s\n" % i for i in a) >>> f.close() >>> open("text2.txt").read() '1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n' >>> print(open("text2.txt").read()) 1 2 3 4 5 6 7 8 9 0

Смена позиции в файле

Метод tell() возвращает текущую позицию в файле. Позицию можно менять с помощью метода seek() .

>>> f = open('text.txt') >>> f.tell() 0 >>> f.readline() 'Hello!\n' >>> f.tell() 7 >>> f.seek(5) 5 >>> f.read(1) '!' >>> f.tell() 6 >>> f.read() '\nThe second line.\n' >>> f.read() '' >>> f.seek(0) 0 >>> f.read() 'Hello!\nThe second line.\n'

В случае бинарных файлов в метод seek() можно передавать второй аргумент, который указывает, с какого места выполняется смещение, указанное в первом аргументе: 0 (по умолчанию) — от начала файла, 1 — с текущей позиции, 2 — с конца.

>>> f = open('text.txt', 'rb') >>> f.read() b'Hello!\nThe second line.\n' >>> f.seek(-6, 2) 18 >>> f.read(4) b'line' >>> f.seek(0) 0 >>> f.read(5) b'Hello' >>> f.seek(2, 1) 7 >>> f.read(3) b'The'

Закрытие файла

В Python следует закрывать файл для высвобождения системных ресурсов. Делается это с помощью метода close() файлового объекта.

С помощью closed (не константа, а так называемый дескриптор, или описатель, данных) проверяют, закрыт файл или нет.

>>> f = open('text.txt') >>> f.closed False >>> f.close() >>> f.closed True

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

>>> with open('text.txt') as f: . print(f.read()) . HelloHello >>> f.closed True
>>> with open('text.txt') as fr, open('text2.txt', 'w') as fw: . fw.write(fr.read()) . 10 >>> fw.closed True 
>>> with ( . open('text.txt') as fr, . open('text2.txt', 'w') as fw, . ): . fw.write(fr.read()) . 10

Двоичные файлы

Пример копирования изображения:

>>> f1 = open('flag.png', 'rb') >>> f2 = open('flag2.png', 'wb') >>> f2.write(f1.read()) 446 >>> f1.close() >>> f2.close()

Модуль struct позволяет преобразовывать данные к бинарному виду и обратно.

>>> f = open('text3.txt', 'wb') >>> f.write('3') Traceback (most recent call last): File "", line 1, in TypeError: 'str' does not support the buffer interface >>> d = struct.pack('>i',3) >>> d b'\x00\x00\x00\x03' >>> f.write(d) 4 >>> f.close() >>> f = open('text3.txt') >>> d = f.read() >>> d '\x00\x00\x00\x03' >>> struct.unpack('>i',d) Traceback (most recent call last): File "", line 1, in TypeError: 'str' does not support the buffer interface >>> f = open('text3.txt', 'rb') >>> d = f.read() >>> d b'\x00\x00\x00\x03' >>> struct.unpack('>i',d) (3,)

Запись строки с переменной в текстовый файл в Python

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

Пример такой строки: «Количество покупок: «, где после двоеточия должно подставиться значение переменной, содержащей количество покупок.

purchase_count = 10 text_file = open("Output.txt", "w") text_file.write("Количество покупок: " + str(purchase_count)) text_file.close()

В данном примере сначала объявляется переменная purchase_count и присваивается ей значение 10. Затем с помощью функции open открывается файл для записи ( «w» ).

Затем с помощью метода write происходит запись в файл строки «Количество покупок: » и значения переменной purchase_count , преобразованного в строку с помощью функции str .

Наконец, с помощью метода close происходит закрытие файла.

Таким образом, в файл будет записана строка «Количество покупок: 10».

Строка и значение переменной объединяются с помощью оператора + . Однако, перед этим значение переменной нужно преобразовать в строку, так как оператор + не может объединять строки и числа.

Также стоит учесть, что при открытии файла в режиме записи ( «w» ), если файл уже существует, его содержимое будет удалено. Если нужно добавить данные в конец существующего файла, следует использовать режим дозаписи ( «a» ).

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

purchase_count = 10 with open("Output.txt", "w") as text_file: text_file.write("Количество покупок: " + str(purchase_count))

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *