…·····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.

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

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

<p>Записываем данные в бинарный файл с помощью функции write()</p>
Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги