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

02.02.2019

Python поддерживает множество различных типов файлов, но условно их можно разделить на два виде: текстовые и бинарные. Текстовые файлы - это к примеру файлы с расширением cvs, txt, html, в общем любые файлы, которые сохраняют информацию в текстовом виде. Бинарные файлы - это изображения, аудио и видеофайлы и т.д. В зависимости от типа файла работа с ним может немного отличаться.

При работе с файлами необходимо соблюдать некоторую последовательность операций:

    Открытие файла с помощью метода open()

    Чтение файла с помощью метода read() или запись в файл посредством метода write()

    Закрытие файла методом close()

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

Чтобы начать работу с файлом, его надо открыть с помощью функции open() , которая имеет следующее формальное определение:

Open(file, mode)

Первый параметр функции представляет путь к файлу. Путь файла может быть абсолютным, то есть начинаться с буквы диска, например, C://somedir/somefile.txt . Либо можно быть относительным, например, somedir/somefile.txt - в этом случае поиск файла будет идти относительно расположения запущенного скрипта Python.

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

    r (Read). Файл открывается для чтения. Если файл не найден, то генерируется исключение FileNotFoundError

    w (Write). Файл открывается для записи. Если файл отсутствует, то он создается. Если подобный файл уже есть, то он создается заново, и соответственно старые данные в нем стираются.

    a (Append). Файл открывается для дозаписи. Если файл отсутствует, то он создается. Если подобный файл уже есть, то данные записываются в его конец.

    b (Binary). Используется для работы с бинарными файлами. Применяется вместе с другими режимами - w или r.

После завершения работы с файлом его обязательно нужно закрыть методом close() . Данный метод освободит все связанные с файлом используемые ресурсы.

Например, откроем для записи текстовый файл "hello.txt":

Myfile = open("hello.txt", "w") myfile.close()

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

В этом случае мы можем обрабатывать исключения:

Try: somefile = open("hello.txt", "w") try: somefile.write("hello world") except Exception as e: print(e) finally: somefile.close() except Exception as ex: print(ex)

В данном случае вся работа с файлом идет во вложенном блоке try. И если вдруг возникнет какое-либо исключение, то в любом случае в блоке finally файл будет закрыт.

Однако есть и более удобная конструкция - конструкция with :

With open(file, mode) as file_obj: инструкции

Эта конструкция определяет для открытого файла переменную file_obj и выполняет набор инструкций. После их выполнения файл автоматически закрывается. Даже если при выполнении инструкций в блоке with возникнут какие-либо исключения, то файл все равно закрывается.

Так, перепишем предыдущий пример:

With open("hello.txt", "w") as somefile: somefile.write("hello world")

Мы обсудили в прошлой статье. В данной статье мы обсудим способы записи данных в файл. Чтобы не было ошибки из за доступа, убедитесь, что в папке где вы хотите выполнить изменения или сам файл имеют права 777 .

Чтобы не соскучится, мы покажем несколько способов внесения данных в файл и наглядно увидим результат . Чтобы открыть файл для записи или же создать его, мы воспользуемся функцией open(filename, mod) и в качестве второго параметрам mod укажем значение w т.е. (write) запись. Если файл с указанным названием filename не существует - он будет создан.

Создаем новый файл в Python

# -*- coding: utf-8 -*- my_file = open("snake.txt", "w") # Закрываем файл my_file.close()

После выполнения данного скрипта, по указанному нами пути будет создан новый файл snake.txt если файл не был создан то нужно проверить права доступа на папку. Стоит учесть, что если файл snake.txt существовал ранее, то после открытия его функцией open() и мод W, тогда содержимое файла удаляется. Если вы хотите добавить что-то в конце, то следует использовать мод "a+".

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

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

# -*- coding: utf-8 -*- my_file = open("snake.txt", "w") text_for_file = "Some text here..." my_file.write(text_for_file) my_file.close()

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

Заменяем данные из определенной строки файла

Если требуется замена данных из файла на определенной его строке , то для этого понадобятся методы readlines () и writelines (). Нам предстоит открыть построчно файл, заменить нужную строку и сохранить файл в такой очередности в которой находятся значения в списке.

Изначальный файл snake.txt

Я Программа написанная в Python 3

Заменяем 5-ю строку со значением "Python" на значение "Питон"

# -*- coding: utf-8 -*- # Открываем файл только для чтения f = open("snake.txt", "r") lines = f.readlines() lines = "Питон" + "\n" # Закрываем файл f.close() # Открываем файл для записи save_changes = open("snake.txt", "w") # Сохраняем список строк save_changes.writelines(lines) # Закрываем файл save_changes.close()

Финальный вид файла snake.txt

Я Программа написанная в Питон 3

Копирование файлов в Python

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

# -*- coding: utf-8 -*- # Открываем файл только для чтения old_image = open("temp/pro.jpeg", "r").read() # Создаем новый файл new_image = open("new_pro.jpeg", "w") # Сохраняем данные старой картинки в новую new_image.write(old_image) new_image.close()

По дороге к работе где вы отлично программируйте на пайтоне случилось непредсказуемое и вы попали в небольшое дтп и некому вытащить вашу машину из беды? Рекомендую отличный эвакуатор который вытащит из любой ситуации вашего железного коня, может даже и подбросит до работы.

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

Сегодня мы рассмотрим следующие темы.

  1. Как открыть файл.
  2. Базовые файловые методы.
  3. Стандартный ввод/вывод.
  4. Произвольный доступ.
  5. Построчная работа с файлами.
  6. Закрытие файла.
  7. Итерация.
  8. Pickling.
  9. Бинарные файлы – модуль struct.
  10. Работа с файловой системой.

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

Открыть файл можно с помощью функции open:

open(name[, mode[, buffering]])

Функция возвращает файловый объект. Обязателен только первый аргумент. Если остальные параметры отсутствуют, файл будет доступен на чтение. Таблица режимов (mode) функции open:

"r" – чтение.

"w" – запись.

"a" – добавление.

"b" – бинарный режим.

"+" – чтение/запись.

Режим "+" может быть добавлен к остальным режимам. По умолчанию питон открывает файлы в текстовом режиме. Для открытия файла в бинарном режиме на чтение можно добавить "rb". Третий параметр устанавливает размер буферизации при работе с файлом. По умолчанию он выключен, и чтение/запись идет напрямую с диска на диск. Для включения буфера третий параметр должен быть отличным от нуля.

2. Базовые файловые методы

В питоне многие объекты являются файлами: стандартный ввод sys.stdin, стандартный вывод sys.stdout, объекты, открываемые функцией urllib.urlopen и т.д.

Запись в файл:

>>> f = open("my_file", "w") >>> f.write("Hello, ") >>> f.write("World!") >>> f.close()

>>> f = open("my_file", "r") >>> f.read(5) "Hello" >>> f.read() ", World!"

3. Стандартный ввод/вывод

В командной строке можно записать подряд несколько команд, передавая результат работы от одной команды к другой по конвейеру – или по каналу (pipe):

cat my_file | python test.py

Первая команда – cat – пишет содержимое текстового файла my_file на стандартный вывод sys.stdout . Вторая команда запускает питоновский файл, который читает стандартный ввод sys.stdin , подсчитывает в нем количество слов и выводит результат:

test.py: import sys text = sys.stdin.read() words = text.split() wordcount = len(words) print "Wordcount:", wordcount

Канал – или пайп (pipe) – это конструкция, объединяющая стандартный вывод со стандартным вводом и позволяющая обмениваться данными между двумя командами.

4. Произвольный доступ

По умолчанию метод read() читает данные последовательно по порядку, от начала и до конца файла. Для произвольного доступа к файлу есть функция seek:

seek(offset[, whence])

offset – смещение в байтах относительно начала файла;

whence – по умолчанию равен нулю, указывает на то, что смещение берется относительно начала файла.

>>> f = open(r"my_file", "w") >>> f.write("01234567890123456789") >>> f.seek(5) >>> f.write("Hello, World!") >>> f.close() >>> f = open(r"my_file") >>> f.read() "01234Hello, World!89"

Функция tell() возвращает текущую позицию файла.

5. Построчная работа с файлами

Обычно мы имеем дело с текстовыми файлами. Прочитать одну строку:

Функция readline() без параметра читает всю строку, наличие параметра указывает функции максимальное число символов строки, которое будет прочитано. Прочитать все строки и вернуть список строк:

file.readlines()

Записать строки в файл:

f = open(r"my_file") lines = f.readlines() f.close() lines = "This is a my_file2 \n" # изменяем 1-ю строку f = open(r"my_file2","w") f.writelines(lines) f.close()

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

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

  1. Питон может буферизировать запись в файл ваших данных, что может привести к неожиданным эффектам и возникновению ошибок.
  2. У операционной системы есть ограничение на число одновременно открытых файлов.
  3. При доступе к файлу из разных мест одновременно и на чтение, и на запись необходимо синхронизировать файловые операции. Буферизация записи может привести к тому, что запись уже произошла, а данных в файле еще нет.

Для полной уверенности в закрытии файла можно использовать блок try/finally:

try: # Тут идет запись в файл finally: file.close()

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

with open("my_file") as somefile: do_something(somefile)

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

7. Итерация

Итерация по файлу является базовой операцией и имеет множество вариантов. Использование функции read() для байтового чтения:

f = open(filename) while True: char = f.read(1) if not char: break process(char) f.close()

Построчное чтение текстовых файлов и функция readline():

f = open(filename) while True: line = f.readline() if not line: break process(line) f.close()

Файл сам может выступать в роли итератора:

8. Pickling

Практически любой тип объекта может быть сохранен на диске в любой момент его жизни, а позже прочитан с диска. Для этого есть модуль pickle:

import pickle t1 = s = pickle.dumps(t1) t2 = pickle.loads(s) print t2

Здесь есть небольшой нюанс: t1 и t2 будут двумя разными объектами, хотя и идентичными.

9. Бинарные файлы

Стандартный модуль struct позволяет преобразовывать объекты в структуры C в виде строк в бинарном формате и обратно. Данные в строке располагаются в соответствии со строкой формата. Эти возможности могут быть использованы для чтения и сохранения в двоичном формате.

Функции этого модуля:

pack(format, value1, value2 ...)

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

unpack(format, string)

Распаковывает строку string в соответствии с форматом format и возвращает кортеж объектов.

calcsize(format)

Возвращает размер структуры (т.е. длину строки), соответствующей формату format.

Таблица основных форматов

Format C Type Python =========================== c char string of length 1 ? Bool bool i int integer l long integer f float float d double float s char string

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

Число перед символом формата "s" интерпретируется как длина строки, а не число повторений. То есть "10s" обозначает строку из 10 символов, в то время как "10c" – 10 раз по одному символу.

Можно изменить порядок следования байтов вручную:

< - little-endian > - big-endian

В следующем примере мы упаковываем в структуру два числа – целое и float, строку из пяти символов, сохраняем в бинарный файл, а потом извлекаем из файла:

from struct import * out = open("123.bin", "wb") format = "if5s" data = pack(format, 24,12.48,"12345") out.write(data) out.close() input = open("123.bin", "rb") data = input.read() input.close() format = "if5s" # one integer value,value2,value3 = unpack(format, data) # note the "," in "value,": unpack apparently returns a n-uple print value print value2 print value3 print calcsize(format) >>> 24 >>> 12.4799995422 >>> 12345 >>> 13

10. Работа с файловой системой

Стандартный модуль os имеет интерфейс работы с файловой системой. Каждая программа имеет текущий каталог. Функция os.getcwd возвращает текущий каталог:

import os cwd = os.getcwd() print cwd

Проверить наличие файла в текущем каталоге:

os.path.exists("my_file")

Вывести список файлов и подкаталогов для данного каталога:

os.listdir(path)

Следующий пример рекурсивно выводит список всех файлов и подкаталогов для данного каталога:

import os def walk(dir): for name in os.listdir(dir): path = os.path.join(dir, name) if os.path.isfile(path): print path else: walk(path) walk(path)

В следующем примере мы получим статистическую информацию о текущем каталоге: общий размер каталога в байтах, число файлов, число подкаталогов. Стандартная функция os.path.walk имеет три параметра: каталог, пользовательская функция, список для подсчета:

import os, sys def getlocaldata(sms,dr,flst): for f in flst: fullf = os.path.join(dr,f) if os.path.islink(fullf): continue # don"t count linked files if os.path.isfile(fullf): sms += os.path.getsize(fullf) sms += 1 else: sms += 1 def dtstat(dtroot): sums = # 0 bytes, 0 files, 1 directory so far os.path.walk(dtroot,getlocaldata,sums) return sums report = dtstat(".") print report

В следующем примере сделана интерпретация системной утилиты grep. В текущем каталоге будут найдены файлы с питоновским расширением, в которых будет найдена поисковая строка "import os":

import os, sys, fnmatch mask = "*.py" pattern = "import os" def walk(arg,dir,files): for file in files: if fnmatch.fnmatch(file,mask): name = os.path.join(dir,file) try: data = open(name,"rb").read() if data.find(pattern) != -1: print name except: pass os.path.walk(".",walk,)

Заключение

Сегодня мы узнали, что файловые объекты поддерживают чтение/запись. Для корректной работы с данными файл нужно программно закрывать. Файлы можно открывать в различных режимах. Стандартный ввод/вывод – это тоже файлы. Можно построчно читать и писать в файл. К файлам можно применять байтовую и построчную итерацию. Любые объекты могут быть сохранены на диске в произвольный момент времени в произвольном состоянии и позже восстановлены путем считывания с диска. Чтение/запись можно выполнять в бинарном режиме, соблюдая совместимость со структурами на языке си. Интерфейс с операционной системой позволяет писать компактные программы, дополняющие стандартные утилиты операционной системы.

Приведенные примеры проверены на версии питона 2.6.

|

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

Для примера представим программу Python, которая проверяет список пользователей для контроля доступа. Список пользователей, вероятно, будет храниться в текстовом файле. Ещё один пример: программа для выполнения финансового анализа получает вводные данные из сохраненной таблицы. Как видите, вне зависимости от приложения, входные и выходные данные задействованы практически всегда.

В данном руководстве речь идёт о типах форматов, которые поддерживает Python 3. Также руководство научит вас обрабатывать текстовые файлы.

Требования

Для выполнения руководства вам понадобится предварительно настроенная среда Python 3. Все необходимые инструкции вы найдёте в следующих статьях:

Форматы файлов в Python 3

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

Данное руководство рассматривает только формат txt.

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

Сначала нужно создать тестовый файл для работы. Откройте текстовый редактор и создайте файл days.txt. Добавьте в новый файл список дней недели:

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Сохраните файл и запомните его местонахождение (это нужно для дальнейшей работы). В данном случае файл будет храниться в каталоге /users/8host/days.txt.

2: Открытие файла

Создайте сценарий files.py в текстовом редакторе и для простоты сохраните его в тот же каталог (/users/8host/).

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

В файле files.py создайте переменную path и укажите в ней путь к файлу days.txt.

Теперь можно использовать функцию open(), чтобы открыть файл days.txt. В качестве первого аргумента функция open() требует путь к файлу, который нужно открыть. Эта функция имеет много других параметров. Одним из основных параметров является режим; это опциональная строка, которая позволяет выбрать режим открытия файла:

  • ‘r’: открыть файл для чтения (опция по умолчанию).
  • ‘w’: открыть файл для записи.
  • ‘x’: создать новый файл и открыть его для записи.
  • ‘a’: вставить в файл.
  • ‘r+’: открыть файл для чтения и записи.

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

days_file = open(path,"r")

3: Чтение файла

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

Первая операция — .read(). Она возвращает все содержимое файла в виде одной строки.

days_file.read()
"Monday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\nSunday\n"

Вторая операция — .readline(), которая возвращает содержимое файла построчно.

days_file.readline()
"Monday\n"

Прочитав первую строку файла, операция readline при следующем запуске выведет вторую строку.

days_file.readline()
"Tuesday\n"

Третья операция — .readlines(), она возвращает список строк, где строки представлены в виде отдельных элементов.

days_file.readlines()
["Monday\n", "Tuesday\n", "Wednesday\n", "Thursday\n", "Friday\n", "Saturday\n", "Sunday\n"]

Читая файлы в Python, важно помнить следующее: если файл был прочитан с помощью одной из операций чтения, его нельзя прочитать снова. К примеру, если вы запустили days_file.read(), а затем days_file.readlines(), вторая операция вернёт пустую строку. Потому нужно открывать новую переменную файла всякий раз, когда вы хотите прочитать данные из файла.

4: Запись в файл

Теперь попробуйте создать новый файл, который будет включать заголовок Days of the Week. Сначала создайте переменную title в файле files.py.

title = "Days of the Week\n"

Сохраните дни недели в строковой переменной days. Ниже показан код из всех вышеупомянутых разделов (чтобы было понятнее); файл открывается в режиме чтения, выходные данные операции чтения сохраняются в новой переменной days.

path = "/users/8host/days.txt"
days_file = open(path,"r")
days = days_file.read()

В файле есть переменные для заголовка и содержимого файла days. Теперь можно записать данные в новый файл. Сначала укажите местонахождение файла (/users/8host/), затем – название нового файла (например, new_days.txt). Путь к новому файлу можно указать в переменной new_path. Чтобы открыть новый файл для записи, используйте функцию open() с параметром ‘w’.


Примечание : Если файл с таким именем (new_days.txt) уже существует, при открытии в режиме ‘w’ его содержимое пострадает.

Функция откроет файл, после чего вы можете записать в него данные с помощью операции .write(). Операции записи необходим всего один параметр – строка, которую нужно записать в файл. Чтобы начать новую строку в файле, нужно явно использовать символ новой строки. Запишите в файл files.py заголовок и добавьте пару операторов print.

new_days.write(title)
print(title)
new_days.write(days)
print(days)

После этого нужно закрыть файл.

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

Операция закрытия файла прерывает соединение между файлом на диске и переменной. Закрытые файлы могут использоваться другими программами, кроме того, это обеспечивает безопасность данных. закрыть файл можно с помощью функции .close(). Добавьте в файл files.py:

days_file.close()
new_days.close()

6: Проверка кода

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

path = "/users/8host/days.txt"
days_file = open(path,"r")
days = days_file.read()
new_path = "/users/8host/new_days.txt"
new_days = open(new_path,"w")
title = "Days of the Week\n"
new_days.write(title)
print(title)
new_days.write(days)
print(days)
days_file.close()
new_days.close()

Сохраните код, откройте терминал и запустите сценарий Python:

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

Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Теперь попробуйте открыть файл new_days.txt. Если всё работает должным образом, файл будет выглядеть так:

Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Заключение

Теперь вы умеете обрабатывать и управлять простыми текстовыми файлами в Python 3: открывать и читать файлы, записывать в них новые данные и закрывать их.

Tags:

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

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

Перед тем как прочесть и записать что-либо в файл, его следует открыть. Чтобы открыть файл в Python используется встроенная функция open(). При вызове, эта функция создает объект типа файл, с которым в дальнейшем можно работать.

Синтаксис функции open() в Python.

my_file = open(имя_файла [, режим_доступа][, буферизация])

При этом:

имя_файла: строка, содержащая имя файла с расширением. Например, "my_file.txt".

режим_доступа: строка, которой мы указываем для чего открывается файл: для чтения, записи, добавления информации, и т.д. Например, "w". По умолчанию файл открывается для чтения - "r".

буферизация: Челое число. Если значение аргумента указано 0 - файл открывается без буферизации, 1 с построчной буферизацией, больше одного процесс буферизации выполняется с указанным размером буфера. Отрицательное число - разер буфера будет равен системному.

Список режимов доступа к файлу в Python.

r Открывает файл только для чтения. Указатель стоит в начале файла.
rb Открывает файл для чтения в двоичном формате. Указатель стоит в начале файла.
r+ Открывает файл для чтения и записи. Указатель стоит в начале файла.
rb+ Открывает файл для чтения и записи в двоичном формате. Указатель стоит в начале файла.
w Открывает файл только для записи. Указатель стоит в начале файла. Создает файл с именем имя_файла, если такового не существует.
wb Открывает файл для записи в двоичном формате. Указатель стоит в начале файла. Создает файл с именем имя_файла, если такового не существует.
w+ Открывает файл для чтения и записи. Указатель стоит в начале файла. Создает файл с именем имя_файла, если такового не существует.
wb+ Открывает файл для чтения и записи в двоичном формате. Указатель стоит в начале файла. Создает файл с именем имя_файла, если такового не существует.
a Открывает файл для добавления информации в файл. Указатель стоит в конце файла. Создает файл с именем имя_файла, если такового не существует.
ab Открывает файл для добавления в двоичном формате. Указатель стоит в конце файла. Создает файл с именем имя_файла, если такового не существует.
a+ Открывает файл для добавления и чтения. Указатель стоит в конце файла. Создает файл с именем имя_файла, если такового не существует.
ab+ Открывает файл для добавления и чтения в двоичном формате. Указатель стоит в конце файла. Создает файл с именем имя_файла, если такового не существует.

Атрибуты файлового объекта в Python.

Как только файл был открыт и у вас появился файловый объект, вы можете получить следующую информацию о нем:

Например:

My_file = open("some.txt", "w") print("Имя файла: ", my_file.name) print("Файл закрыт: ", my_file.closed) print("В каком режиме файл открыт: ", my_file.mode) print("Пробелы: ", my_file.softspace)

Закрытие файла в Python. Метод close().

Метод файлового объекта close() автоматически закрывает файл, при этом теряется любая несохраненная информация. Работать с файлом (читать, записывать) после этого нельзя.

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

My_file = open("some.txt") print("Имя файла: ", my_file.name) print("Файл закрыт: ", my_file.closed) my_file.close() print("А теперь закрыт: ", my_file.closed)

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

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

Запись в файл в Python. Метод write().

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

Метод write() не добавляет символ переноса строки ("\n") в конец файла.

Синтаксис метода write().

My_file.write(string);

Например:

My_file = open("some.txt", "w") my_file.write("Мне нравится Python!\nЭто классный язык!") my_file.close()

Вышеприведенный код создаст файл some.txt и запишет в него указанную строку.

Чтение из файла в Python. Метод read().

Метод read() читает строку из открытого файла.

Синтаксис метода read().

My_file.read()

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

Например, прочтем созданный нами файл some.txt:

My_file = open("some.txt") my_string = my_file.read() print("Было прочитано:") print(my_string) my_file.close()

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

Например:

My_file = open("some.txt") my_file.read(10) print ("Я на позиции:", my_file.tell()) my_file.close()

Говоря проще, метод tell() сообщает в скольки байтах от начала файла мы сейчас находимся.

Чтобы перейти на нужную нам позицию, следует использовать другой метод - seek().

Синтаксис метода seek().

My_file.seek(offset, )

Аргумент offset указывет на сколько байт перейти. опциональный аргумент from означает позицию, с которой начинается движение. 0 - означает начало файла, 1 нынешняя позиция, 2 - конец файла.

The seek(offset[, from]) method changes the current file position. The offset argument indicates the number of bytes to be moved. The from argument specifies the reference position from where the bytes are to be moved.

Например:

My_file = open("some.txt", "r") print(my_file.read(10)) print("Мы находимся на позиции: ", my_file.tell()) # Возвращаемся в начало my_file.seek(0) print(my_file.read(10)) my_file.close()

Добавление в файл. Метод write()

Если вы хотите не перезаписать файл полностью (что делает метод write в случае открытия файла в режиме "w"), а только добаить какой-либо текст, то файл следует открывать в режиме "a" - appending. После чего использовать все тот же метод write.

Например:

# Удалит существующую информацию в some.txt и запишет "Hello". my_file = open("some.txt", "w") my_file.write("Hello") my_file.close() # Оставит существующую информацию в some.txt и добавит "Hello". my_file = open("some.txt", "a") my_file.write("Hello") my_file.close()

Расширенная работа с файлами в Python.

Для доступа к более широкому функционалу в работе с файлами в Python, как то удаление файлов, создание директорий и т.д. Следует подключить библиотеку os. Скоро выйдут статьи с примерами.

Приложение-пример работы с файлами в Python.

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