На этом шаге мы рассмотрим остальные методы и атрибуты, применяемые для работы с файлами.
Рассмотрим оставшиеся методы, применяемые для работы с файлами.
>>> f = open(r"file.txt", "r", encoding="cp1251") >>> f.fileno() # Дескриптор файла 3 >>> f.close ()
>>> f = open(r"file.txt", "r+", encoding="cp1251") >>> f.read() 'Строка1\nСтрока2' >>> f.truncate (5) 5 >>> f.close () >>> with open(r"file.txt", "r", encoding="cp1251") as f: f.read() 'Строк'
>>> with open(r"file.txt", "w", encoding="cp1251") as f: f.write("String1\nString2") 15 >>> f = open(r"file.txt", "r", encoding="cp1251") >>> f.tell() # Указатель расположен в начале файла 0 >>> f.readline() # Перемещаем указатель 'String1\n' >>> f.tell () # Возвращает 9 (8 + '\r'), а не 8 !!! 9 >>> f.close ()
>>> f = open(r"file.txt", "rb") >>> f.readline() # Перемещаем указатель b'String1\r\n' >>> f.tell () # Теперь значение соответствует 9 >>> f.close ()
Выведем значения этих атрибутов:
>>> import io >>> io.SEEK_SET, io.SEEK_CUR, io.SEEK_END (0, 1, 2)
Пример использования метода seek():
>>> import io >>> f = open(r"file.txt", "rb") >>> f.seek(9, io.SEEK_CUR) # 9 байтов от указателя 9 >>> f.tell() 9 >>> f.seek(0, io.SEEK_SET) # Перемещаем указатель в начало 0 >>> f.tell() 0 >>> f.seek (-9, io.SEEK_END) # -9 байтов от конца файла 7 >>> f.tell() 7 >>> f.close ()
>>> f = open (r"C:\temp\new\file.txt", "r") >>> f.seekable () True
Помимо методов, объекты файлов поддерживают несколько атрибутов:
>>> f = open(r"file.txt", "r+b") >>> f.name, f.mode, f.closed ('file.txt', 'rb+', False) >>> f.close () >>> f.closed True
>>> f = open (r"file.txt", "a", encoding="cp1251") >>> f.encoding 'cp1251' >>> f.close ()
Стандартный вывод stdout также является файловым объектом. Атрибут encoding этого объекта всегда содержит кодировку устройства вывода, поэтому строка преобразуется в последовательность байтов в правильной кодировке. Например, при запуске с помощью двойного щелчка на значке файла атрибут encoding будет иметь значение "cp866", а при запуске в окне Python Shell редактора IDLE - значение "cp1251". Пример:
>>> import sys >>> sys.stdout.encoding 'cp1251'
>>> f = open (r"file.txt", "ц", encoding="cp1251") >>> f.buffer.write (bytes ("Строка", "cp1251")) 6 >>> f.close()
На следующем шаге мы рассмотрим доступ к файлам с помощью модуля os.