Чтение и запись файлов в Python
21.02.2018
Теги: Python • Web-разработка • Файл
Перед тем как прочесть или записать что-либо в файл, его следует открыть с помощью функции 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-разработка • Файл