Эта глава посвящена разнообразным способам хранения данных, каждый из которых оптимизирован для разных целей: плоским файлам, структурированным файлам и базам данных. Операции с файлами, не касающиеся ввода-вывода, рассматриваются в разделе «Файлы» главы 10.

В этой главе также будут показаны первые примеры использования нестандартных модулей Python — да-да, этот код не входит в стандартные библиотеки Python. Вы можете без особых проблем установить их с помощью команды pip. Более подробно об использовании этих модулей вы можете прочитать в приложении Г.

<p>Ввод информации в файлы и ее вывод из них</p>

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

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

fileobj = open(filename, mode)

Кратко поясню фрагменты этого вызова:

• fileobj — это объект файла, возвращаемый функцией open();

• filename — это строка, представляющая собой имя файла;

• mode — это строка, указывающая на тип файла и действия, которые вы хотите над ним произвести.

Первая буква строки mode указывает на операцию:

• r означает чтение;

• w означает запись. Если файла не существует, он будет создан. Если файл существует, он будет перезаписан;

• x означает запись, но только если файла еще не существует;

• a означает добавление данных в конец файла, если он существует.

Вторая буква строки mode указывает на тип файла:

• t (или ничего) означает, что файл текстовый;

• b означает, что файл бинарный.

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

Наконец, вам нужно закрыть файл.

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

<p>Запись в текстовый файл с помощью функции write()</p>

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

>>> poem = '''There was a young lady named Bright,

… Whose speed was far faster than light;

… She started one day

… In a relative way,

… And returned on the previous night.'''

>>> len(poem)

150

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

>>> fout = open('relativity', 'wt')

>>> fout.write(poem)

150

>>> fout.close()

Функция write() возвращает число записанных байтов. Она не добавляет никаких пробелов или символов новой строки, как это делает функция print(). С помощью функции print() вы также можете записывать данные в текстовый файл:

>>> fout = open('relativity', 'wt')

>>> print(poem, file=fout)

>>> fout.close()

Отсюда возникает вопрос: какую функцию использовать — write() или print()? По умолчанию функция print() добавляет пробел после каждого аргумента и символ новой строки в конце. В предыдущем примере она добавила символ новой строки в файл relativity. Для того чтобы функция print() работала как функция write(), передайте ей два следующих аргумента:

• sep (разделитель, по умолчанию это пробел, ' ');

• end (символ конца файла, по умолчанию это символ новой строки, '\n').

Функция print() использует значения по умолчанию, если только вы не передадите ей что-то еще. Мы передадим ей пустые строки, чтобы подавить все лишние детали, обычно добавляемые функцией print():

>>> fout = open('relativity', 'wt')

>>> print(poem, file=fout, sep='', end='')

>>> fout.close()

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

>>> fout = open('relativity', 'wt')

>>> size = len(poem)

>>> offset = 0

>>> chunk = 100

>>> while True:

…·····if offset > size:

…··········break

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги