Изучаем Python. №11. Работа с Файлами.


Доброго времени суток, дорогие читатели! Продолжаем изучение замечательного языка питон. Сегодня постараюсь в наиболее понятной форме рассказать о работе с файлами.
На самом деле это простая тема, так что, думаю, все пойдет как по маслу.

Короткое отступление о данной статье. На сегодняшний день она является самой популярной на сайте slusar.su. В честь чего, предлагаю какое бы то ни было общение по этой теме перенести на форум http://forum.slusar.su/, где можно оставить как свои вопросы, так и показать примеры своего кода. Благодарю за внимание.




Чтение файла в python:

Итак. Файл,а именно текстовый документ file.txt, находится в той же директории, что и моя программа (в данном случае test.py), так что никакие пути я указывать не буду, хотя это возможно. Путь к файлу может быть как относительный, так и абсолютный.
Сейчас мы попытаемся прочитать, что же в нем написано:

>>>f = open('file.txt', 'r')
>>>print f.read()
Привет! Я - файл :)

Встроенная функция open(file, mode=’r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True) — Открывает файл и возвращает соответствующий поток.
Вторым аргументом (все что в скобочках функции) является режим, в котором мы открываем файл. Есть такие режимы:

‘r’ — открытие на чтение (выступает значением по умолчанию).
‘w’ — открытие на запись, содержимое файла удаляется, если файла с таким именем нет, то он автоматически создается.
‘x’ — открытие на запись, если файл не существует, иначе исключение.
‘a’ — открытие на дозаписывание, информация добавляеться в конец уже существующей информации в файле.
‘b’ — открытие в двоичном режиме.
‘t’ — открытие в текстовом режиме (выступает значением по умолчанию).
‘+’ — открытие на чтение и запись.

Кроме того, вышеперечисленные режимы могут быть объеденённы. По умолчанию режим ‘rt’. Если вы хотите произвести чтение в двоичном режиме, то укажите ‘rb’.
Еще существует аргумент encoding — он задает кодировку и используется только в текстовом режиме чтения файла.

Ну что ж, мы уже познакомились с первым методом read, который считывает информацию с файла. Если в его аргументе ничего не указать, то он выведет всю информацию. Но можно обращаться к файлу с целью побитового вывода. (вспоминаем, что кириллица занимает по 2 байта на символ). Итак пробуем вывести первые 6 букв:

>>> f = open('file.txt', 'r')
>>> print f.read(12)
Привет

Хорошо, а теперь попробуем еще один способ. Используем для этого цикл.

f = open('file.txt', 'r')
for line in f:
    print line
f.close()
>>>Привет! Я - файл :)

После работы с файлом, его нужно обязательно закрыть. Используем для этого метод close().

Записываем информацию в файл:

Итак, открываем файл в режиме запись ‘w’, при этом все содержимое файла удалиться. И записываем в него слово ‘string’ с помощью метода write():

f = open('file.txt', 'w')
f.write('string1n') #n - перенос строки
f.write('sting2')
f.close()
# Проверяем, записались ли значения
f = open('file.txt', 'r')
print f.read()
f.close()

Результат:
string1
sting2

Круто, все работает ;). Пробуем еще:

f = open('file.txt', 'w')
f.write('abvgdn') #n - перенос строки
f.seek(3) #переход на три байта
f.write('0000n') # вставляем после 3 символа и стираем все остальное
f.write('hello')
f.close()
# читаем значение построчно
f = open('file.txt', 'r')
print f.readline()
f.close()
# читаем ВСЕ строки
f = open('file.txt', 'r')
print f.readlines()
f.close()

Результат:
abv0000

['abv0000n', 'hello']

Вносим изменения в файл, не затронув при этом старые данные:

f = open('file.txt', 'w')
f.writelines('test')
f.close()

f = open('file.txt', 'r')
print f.read()
f.close() 

Результат:
abv0000

['abv0000n', 'hello']
test

На этом пока все. Оставляйте комментарии. Делитесь ссылкой на статью.




2 идей о “Изучаем Python. №11. Работа с Файлами.

  1. kot

    Исправьте в последнем блоке:
    f = open(‘file.txt’, ‘w’) на f = open(‘file.txt’, ‘a’)
    иначе затрется содержимое файла,а Вы пишите «не затронув при этом старые данные».

  2. Пингбэк: Работа с Файлами — Python admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.