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

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

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

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

При этом:

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

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

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

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

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

Чтение файла

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

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

my_file.read([count])

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

Этот метод читает информацию с начала файла и, если параметр count не указан, до конца файла. Например, прочтем созданный файл text.txt:

my_file = open("text.txt", encoding='utf-8')
my_string = my_file.read()
print("Было прочитано:")
print(my_string)
my_file.close()
  
input("Нажмите Enter для выхода")

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

f = open('text.txt', encoding='utf-8')
for line in f:
  print(line)
  
input("Нажмите Enter для выхода")

Разные способы чтения из текстового файла:

print("** Открытие и закрытие файла **")
txt = open("text.txt", "r", encoding='utf-8')
txt.close()

print("** Посимвольное чтение файла **")
txt = open("text.txt", "r")
print(txt.read(1))
print(txt.read(2))
print(txt.read(6))
txt.close()

print("** Посимвольное чтение с указанием кодировки **")
txt = open("text.txt", "r", encoding='utf-8')
print(txt.read(1))
print(txt.read(2))
print(txt.read(6))
txt.close()

print("** Чтение всего файла **")
txt = open("text.txt", "r", encoding='utf-8')
content = txt.read()
print(content)
txt.close()

print("** Читаем строку из файла посимвольно **")
txt = open("text.txt", "r", encoding='utf-8')
print(txt.readline(1))
print(txt.readline(5))
txt.close()

print("** Читаем строку из файла полностью **")
txt = open("text.txt", "r", encoding='utf-8')
print(txt.readline())
print(txt.readline())
txt.close()

print("** Чтение всего файла в список **")
txt = open("text.txt", "r", encoding='utf-8')
lines = txt.readlines()

print(lines)
print(len(lines))
for line in lines:
   print(line)
   
txt.close()

print("** Построчное чтение файла **")
txt = open("text.txt", "r", encoding='utf-8')
for line in txt:
  print(line)
txt.close()

input("Нажмите Enter для выхода")

Результат выполнения программы:


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

Запись файла

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

Синтаксис метода write():
my_file.write(string);
my_file = open("primer.txt", "w")
my_file.write("Мне нравится Python!\nЭто классный язык!")
my_file.close()
input("Создание файла и запись завершена!")

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

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

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

my_file = open("primer.txt")
print("Имя файла: ", my_file.name)
print("Файл закрыт: ", my_file.closed)
my_file.close()
print("А теперь закрыт: ", my_file.closed)
input("Нажмите Enter для выхода")

Консервация

Консервация – это долговременное хранение структурированных данных. Программист может “законсервировать” в файл, то есть сохранить в неизменном виде структуру, такую как список или словарь.

Для поддержки консервации нужно импортировать в программу два модуля:

import pickle
import shelve

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

Пример консервации:

import pickle
import shelve

first_name = ["Витя", "Максим", "Коля"]
last_name = ["Сидоров", "Петров", "Иванов"]

datafile = open("names.dat", "wb")

pickle.dump(first_name, datafile)
pickle.dump(last_name, datafile)
datafile.close()

input("Файл создан")

Данный пример создает и записывает данные в файл “names.dat”. Данные будут записаны в двоичном виде.

Пример чтения файлов из бинарного файла (законсервированного). Листинг:

import pickle
import shelve

datafile = open("names.dat", "rb")
fnames = pickle.load(datafile)
lnames = pickle.load(datafile)
datafile.close()

print(fnames)
print(lnames)

input()

# Будет выведено:
['Витя', 'Максим', 'Коля']
['Сидоров', 'Петров', 'Иванов']

Произвольный доступ к законсервированным данным

После консервации нескольких списков можно получить доступ к одному произвольному списку. В этом может помочь модуль shelve. Первым делом необходимо создать полку:

s = shelve.open("text.dat")

Данная функция работает подобно файловой функции open(), но открывает не текстовый файл, а файл с консервированными объектами.

Функции shelve.open() нужно передать только имя файла. Второй необязательный параметр – это режим доступа, который может быть:

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

n – создание нового файла для чтения и записи, если файл существует, он будет перезаписан.

r – доступ только чтение, если файл не существует, вы получите сообщение об ошибке.

w – доступ только запись, если файл не существует, вы получите сообщение об ошибке.

Рассмотрим пример:

import pickle
import shelve

s = shelve.open("text.dat")

s["first_name"] = ["Витя", "Максим", "Коля"]
s["last_name"] = ["Сидоров", "Петров", "Иванов"]

s.sync()
s.close()

s = shelve.open("text.dat")
print(s["last_name"])
input()

В данном примере мы создаем функцию создания полки, а затем помещаем данные “на полку”. Далее проверяем запись и открываем файл и прочитаем список фамилий с полки. Вывод программы:


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

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Один ответ к “Файлы. Работа с файлами в Python.”

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

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

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Связи между моделями.

Связи между моделями.

В нашем проекте есть одна модель под названием “Объявления”. В этой статье мы создадим новый класс модели “Rubric”, которая будет представлять рубрики объявлений. Допишем в

 
Параметры полей и моделей.

Параметры полей и моделей.

Для того, чтобы наша административная панель Django выглядела более понятна для обычного пользователя необходимо указать правильные названия полей. Наша созданная модель представляется непонятной аббревиатурой “Bbs”,

 
Административный web-сайт Django.

Административный web-сайт Django.

Административный web-сайт предоставляет доступ ко всем моделям, объявленным во всех приложениях, что составляют проект. С помощью данной панели можно просматривать, добавлять, править и удалять записи,

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: