Операции с файлами.
В Питоне широко используются файлы, для операции с данными, которые предполагается хранить длительное время. Для работы с файлами используется специальный объект файла, который содержит в себе функции для открытия, закрытия файлов, чтения и записи данных.
Метод open(имя, режим). Открывает файловый объект для последующего оперирования с ним. Функция принимает два параметра: строку, содержащую путь к файлу(может быть абсолютным или относительным текущего каталога или переменной окружения PATH) и режимом открытия файла. Режим открытия файла определяет допустимые операции доступа к файлу:
w | Открыть файл для записи. Если такой файл уже существует, то его содержимое исчезает(если это возможно). |
r | Открыть файл только для чтения. |
a | Открыть файл для добавления, т.е. записи в конец файла. Предыдущее содержимое файла сохраняется. |
r+ | Открыть файл для записи/чтения, содержимое файла сохраняется. |
w+ | Открыть файл для записи/чтения, содержимое файла исчезает(см w). |
r+b | Открыть двоичный (если такие файлы поддерживаются операционной системой) файл для записи/чтения, содержимое файла сохраняется. |
w+b | Открыть двоичный файл для записи/чтения, содержимое файла исчезает(см w). |
rb | Открыть двоичный файл только для чтения. |
wb | Открыть двоичный файл для записи. Если такой файл уже существует, то его содержимое исчезает(если это возможно). |
Двоичные файлы обеспечивают более быстрый доступ к данным, но бывают не переносимы и, к тому же, их сложно редактировать и просматривать. Текстовые файлы применимы в большинстве случаев, так как они переносимы, легко просматриваются и редактируются, но они медленнее двоичных и могут отображать корректно только символы набора ASCII.
>>> f=open('/tmp/workfile', 'w') >>> print f <open file '/tmp/workfile', mode 'w' at 80a0960>
Метод read([число_байт]). Данный метод читает из файла, открытого для чтения число байтов, указанных в качестве аргумента. Если метод вызывается без параметров, то читается весь файл, если файл был прочитан до конца(встретился символ EOF), то метод read() возвращает пустую строку:
>>> f.read() 'This is the entire file.\n' >>> f.read() ''
Метод readline() читает одну строку файла до символа перевода строки(включая сам символ \n). Если строка состоит только из символа перевода строки, то метод readline() возвращает пустую строку. Если в конце файла нет пустой строки с символом \n, то возвращаемый результат неопределён(этого допускать нельзя):
>>> f.readline() 'This is the first line of the file.\n'
>>> f.readline() 'Second line of the file\n'
>>> f.readline() ''
Метод readlines([размер_строки]) читает все строки файла в список. Читаются только законченные строки. Необязательный параметр размер_строки дополняет читает строку, и если она меньше указанной длины читает дальше, до достижения указанного числа символов, такой приём эффективен для чтения очень больших файлов построчно без необходимости размещения его в памяти:
>>> f.readlines()
['This is the first line of the file.\n', 'Second line of the file\n']
Метод write(строка) пишет в файл указанную строку, ничего при этом не возвращая:
>>> f.write('This is a test\n')
Метод seek(на_сколько_байт[, откуда]) перемещает указатель текущего положения файла на заданное количество байт от позиции, указанной вторым аргументом:
0(по умолчанию) | 1 | 2 |
начало файла | текущая позиция в файле | конец файла |
Метод tell() возвращает текущую позицию в файле:
>>> f=open('/tmp/workfile', 'r+')
>>> f.write('0123456789abcdef')
>>> f.seek(5) # Переход к шестому байту от начала
>>> f.read(1)
'5'
>>> f.seek(-3, 2) # Переход к третьему байту до конца файла
>>> f.read(1)
'd'
Метод close() закрывает объект файла, перенося все сделанные в нём изменения на диск, возвращая ресурсы операционной системе. Обязательно закрывайте все файлы, сто больше не используете, т.к. не закрытый файл может привести к потере данных. После закрытия обращение к объекту файла автоматически вызывает ошибку