Чтение и запись файлов в Python

21.02.2018

Теги: PythonWeb-разработкаФайл

Перед тем как прочесть или записать что-либо в файл, его следует открыть с помощью функции open(). При вызове эта функция создает объект типа File, с которым в дальнейшем можно работать.

open(file, mode, buffering, encoding)

Режим доступа mode — строка, в которой указывается для чего открывается файл:

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

Режимы могут быть объединены, то есть, к примеру, 'rb' — чтение в двоичном режиме. По умолчанию режим равен 'rt'.

Буферизация buffering (целое число): 0 — файл открывается без буферизации, 1 — с построчной буферизацией, больше одного — буферизация выполняется с указанным размером, отрицательное число — разер буфера будет равен системному.

И последний аргумент encoding задает кодировку, нужен только в текстовом режиме чтения файла.

Как только файл был открыт и появился файловый объект, можно получить следующую информацию:

  • file.closed — возвращает True если файл был закрыт
  • file.mode — возвращает режим доступа, с которым был открыт файл
  • file.name — возвращает имя файла
  • file.softspace — возвращает False, если при выводе содержимого файла следует отдельно добавлять пробел
>>> file = open('test.txt')
>>> file.closed
False
>>> file.mode
'r'
>>> file.name
'test.txt'
>>> file.close()

Метод read() читает весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n). Запись в файл осуществляется с помощью метода write(). После окончания работы с файлом его обязательно нужно закрыть с помощью метода close().

>>> helloFile = open('C:\\example\\hello.txt', 'w')
>>> helloFile.write('Hello, world!\n')
14
>>> helloFile.close()
>>> helloFile = open('C:\\example\\hello.txt', 'r')
>>> helloFile.read()
'Hello, world!\n'
>>> helloFile.close()

Добавление информации в файл:

>>> helloFile = open('C:\\example\\hello.txt', 'a')
>>> helloFile.write('It\'s nice to meet you.\n')
23
>>> helloFile.close()

Чтение всех строк из файла:

>>> helloFile.readlines()
['Hello, world!\n', "It's nice to meet you.\n"]
>>> helloFile.close()

Построчное чтение из файла:

>>> helloFile = open('C:\\example\\hello.txt', 'r')
>>> helloFile.readline()
'Hello, world!\n'
>>> helloFile.readline()
"It's nice to meet you.\n"
>>> helloFile.close()

При считывании символ новой строки \n присутствует в конце каждой из строк. Его может не быть лишь в последней строке — это позволяет добиться однозначности: если метод возвращает пустую строку, значит достигнут конец файла; если строка содержит лишь символ \n значит это просто очередная строка.

Запись нескольких строк в файл (при использовании with закрывать файл не нужно):

>>> with open('test.txt', 'w') as file:
...     file.writelines(['First line\n', 'Second line'])
>>> with open('test.txt') as file:
...     file.readlines()

['First line\n', 'Second line']

Метод tell() возвращает позицию указателя, метод seek(offset, [from]) позволяет перейти на нужную позицию. Аргумент offset указывает на сколько байт перейти; аргумент from означает позицию, с которой начинается движение. 0 — означает начало файла, 1 — нынешняя позиция, 2 — конец файла.

Сохранение данных с помощью модуля shelve

>>> import shelve
>>> shelfFile = shelve.open('data')
>>> users = ['Иванов', 'Петров']
>>> mails = ['ivanov@mail.ru', 'petrov@mail.ru']
>>> shelfFile['users'] = users
>>> shelfFile['mails'] = mails
>>> shelfFile.close()
>>> os.listdir()
['data.bak', 'data.dat', 'data.dir', 'hello.txt']
>>> shelfFile = shelve.open('data')
>>> shelfFile['users']
['Иванов', 'Петров']
>>> shelfFile['mails']
['ivanov@mail.ru', 'petrov@mail.ru']
>>> shelfFile.close()

Поиск: Python • Web-разработка • Файл

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.