Самый простой пример стойкого хранилища — это старый добрый файл, иногда его еще называют плоским файлом. Он представляет собой последовательность байтов, которая хранится под именем файла. Вы считываете данные из файла в память и записываете данные из памяти в файл. Python позволяет делать это довольно легко. Операции с файлами, присутствующие в этом языке программирования, были смоделированы на основе знакомых и популярных аналогов, имеющихся в Unix.
Перед тем как что-то записать в файл или считать из него, вам нужно открыть его:
>fileobj = open(filename, mode)
Кратко поясню фрагменты этого вызова:
• fileobj — это объект файла, возвращаемый функцией open();
• filename — это строка, представляющая собой имя файла;
• mode — это строка, указывающая на тип файла и действия, которые вы хотите над ним произвести.
Первая буква строки mode указывает на операцию:
• r означает чтение;
• w означает запись. Если файла не существует, он будет создан. Если файл существует, он будет перезаписан;
• x означает запись, но только если файла еще не существует;
• a означает добавление данных в конец файла, если он существует.
Вторая буква строки mode указывает на тип файла:
• t (или ничего) означает, что файл текстовый;
• b означает, что файл бинарный.
После открытия файла вы вызываете функции для чтения или записи данных, они будут показаны в следующих примерах.
Наконец, вам нужно закрыть файл.
Создадим файл, содержащий одну строку, в одной программе и считаем его в другой.
Запись в текстовый файл с помощью функции write()
По какой-то причине существует не так уж много лимериков о специальной теории относительности. В качестве источника данных придется использовать всего один:
>>>> 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(), передайте ей два следующих аргумента: