>>>> 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()
Если вы включите символ 'b' в строку режима, файл будет открыт в бинарном режиме. В этом случае вы вместо чтения и записи строк будете работать с байтами.
У нас под рукой нет бинарного стихотворения, поэтому мы просто сгенерируем 256 байтовых значений от 0 до 255:
>>>> bdata = bytes(range(0, 256))
>>>> len(bdata)
>256
Откроем файл для записи в бинарном режиме и запишем все данные сразу:
>>>> fout = open('bfile', 'wb')
>>>> fout.write(bdata)
>256
>>>> fout.close()
И вновь функция write() возвращает количество записанных байтов.
Как и в случае с текстом, вы можете записывать бинарные данные фрагментами:
>>>> fout = open('bfile', 'wb')
>>>> size = len(bdata)
>>>> offset = 0
>>>> chunk = 100
>>>> while True:
>…·····if offset > size:
>…··········break
>…·····fout.write(bdata[offset: offset+chunk])
>…·····offset += chunk
>…
>100
>100
>56
>>>> fout.close()
Читаем бинарные файлы с помощью функции read()
Это просто: все, что вам нужно, — открыть файл в режиме 'rb':
>>>> fin = open('bfile', 'rb')
>>>> bdata = fin.read()
>>>> len(bdata)
>256
>>>> fin.close()