Запись и чтение содержимого файла целиком
Давайте откроем файл на запись, запишем в него текст и закроем файл. Метод write
записывает строку в файл без какой-либо дополнительной обработки:
f = open("foo.txt", "w")
f.write('Hello\nWorld!') # 12
f.close()
Здесь
"w"
означает режим "запись" (write), а12
сообщает о количестве символов, которые мы записали в файл соответствующим вызовомwrite
.
Теперь откроем файл в режиме чтения и прочитаем всё содержимое:
f = open("foo.txt", "r") # "r" — чтение, read
f.read() # 'Hello\nWorld!'
f.close()
Ура, мы прочитали ровно то, что записали до этого.
Позиция в файле
Вызывать метод write
можно несколько раз. Каждый раз мы получим в ответ кол-во символов, которое записали. Текст же будет накапливаться. Так происходит потому, что вызов метода write
перемещает так называемую текущую позицию в файле в его (файла) конец.
read
тоже учитывает текущую позицию: читает текст от неё и до конца файла. Методу можно явно сказать, сколько символов должно быть прочитано — в этом случае метод постарается прочитать указанное количество символов, если таковых хватает в файле. В любом случае вызов метода read
перемещает позицию в то место, где закончилось чтение.
При открытии файла текущая позиция всегда указывает на первый символ текста (т.е. равна нулю). А при прочтении файла до конца с помощью вызова метода read
без параметров позиция перемещается в конец файла и последующие чтения ничего не дают:
f = open("foo.txt", "r") # "r" — чтение, read
f.read() # 'Hello\nWorld!'
f.read() # ''
f.close()
Позицию в файле можно изменять и вручную. Для этого используется метод seek
, о котором вы можете почитать в документации.
Позиция и текстовые файлы
Чаще всего вам придётся работать с текстовыми файлами. В таких файлах позиция не столь важна, т.к. не учитывает разделение текста на строки. А вот при работе с файлами в двоичном режиме умение работать с позицией и смещениями очень важно. Советую поэкспериментировать с позиционированием внутри файлов и записью/чтением нетекстовых данных.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.