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

• 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

>…·····fout.write(poem[offset: offset+chunk])

>…·····offset += chunk

>…

>100

>50

>>>> fout.close()

Этот код записал 100 символов за первую попытку и последние 50 символов — за следующую.

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

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

>Traceback (most recent call last):

>··File "", line 1, in

>FileExistsError: [Errno 17] File exists: 'relativity'

Вы можете использовать этот код вместе с обработчиком исключений:

>>>> try:

>…·····fout = open('relativity', 'xt')]

>…·····fout.write('stomp stomp stomp')

>… except FileExistsError:

>…·····print('relativity already exists!. That was a close one.')

>…

>relativity already exists!. That was a close one.

Считываем данные из текстового файла с помощью функций read(), readline() и readlines()

Вы можете вызвать функцию read() без аргументов, чтобы проглотить весь файл целиком, как показано в следующем примере. Будьте осторожны, делая это с крупными файлами, файл размером 1 Гбайт потребит 1 Гбайт памяти:

>>>> fin = open('relativity', 'rt')

>>>> poem = fin.read()

>>>> fin.close()

>>>> len(poem)

>150

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

>>>> poem = ''

>>>> fin = open('relativity', 'rt')

>>>> chunk = 100

>>>> while True:

>…·····fragment = fin.read(chunk)

>…·····if not fragment:

>…·········break

>…·····poem += fragment

>…

>>>> fin.close()

>>>> len(poem)

>150

После того как вы считали весь файл, дальнейшие вызовы функции read() будут возвращать пустую строку (' '), которая будет оценена как False в проверке if not fragment. Это позволит выйти из цикла while True.

Вы также можете считывать файл по одной строке за раз с помощью функции readline(). В следующем примере мы будем присоединять каждую строку к строке poem, чтобы воссоздать оригинал: