…·····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 "
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, чтобы воссоздать оригинал:
>>> poem = ''
>>> fin = open('relativity', 'rt')
>>> while True:
…·····line = fin.readline()
…·····if not line:
…·········break
…·····poem += line
…
>>> fin.close()
>>> len(poem)
150
Для текстового файла даже пустая строка имеет длину, равную 1 (символ новой строки), такая строка будет считаться True. Когда весь файл будет считан, функция readline() (как и функция read()) возвратит пустую строку, которая будет считаться False.
Самый простой способ считать текстовый файл — использовать
>>> poem = ''
>>> fin = open('relativity', 'rt')
>>> for line in fin:
…·····poem += line
…
>>> fin.close()
>>> len(poem)
150
Во всех предыдущих примерах в результате получалась одна строка poem. Функция readline() считывает по одной строке за раз и возвращает список этих строк:
>>> fin = open('relativity', 'rt')
>>> lines = fin.readlines()
>>> fin.close()
>>> print(len(lines), 'lines read')
5 lines read
>>> for line in lines:
…·····print(line, end='')
…
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.>>>
Мы указали функции print() не добавлять автоматически символы новой строки, поскольку первые четыре строки сами их имеют. В последней строке этого символа не было, что заставило интерактивное приглашение появиться сразу после последней строки.
Записываем данные в бинарный файл с помощью функции write()