Простой Python. Современный стиль программирования (Любанович) - страница 118

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

Самый простой пример стойкого хранилища — это старый добрый файл, иногда его еще называют плоским файлом. Он представляет собой последовательность байтов, которая хранится под именем файла. Вы считываете данные из файла в память и записываете данные из памяти в файл. 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(), передайте ей два следующих аргумента: