• 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, чтобы воссоздать оригинал: