Чтение и запись файлов в 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-разработка • Файл