Эта статья посвящена работе с файлами (вводу/выводу) в Python: открытие, чтение, запись, закрытие и другие операции.
Файлы Python
Файл — это всего лишь набор данных, сохраненный в виде последовательности битов на компьютере. Информация хранится в куче данных (структура данных) и имеет название «имя файла» (filename).
В Python существует два типа файлов:
Текстовые файлы
Это файлы с человекочитаемым содержимым. В них хранятся последовательности символов, которые понимает человек. Блокнот и другие стандартные редакторы умеют читать и редактировать этот тип файлов.
Текст может храниться в двух форматах: ( .txt ) — простой текст и ( .rtf ) — «формат обогащенного текста».
Бинарные файлы
В бинарных файлах данные отображаются в закодированной форме (с использованием только нулей (0) и единиц (1) вместо простых символов). В большинстве случаев это просто последовательности битов.
Они хранятся в формате .bin .
Любую операцию с файлом можно разбить на три крупных этапа:
Pascal. Ввод-вывод. Текстовые файлы
- Открытие файла
- Выполнение операции (запись, чтение)
- Закрытие файла
Открытие файла
Метод open()
В Python есть встроенная функция open() . С ее помощью можно открыть любой файл на компьютере. Технически Python создает на его основе объект.
f = open(file_name, access_mode)
- file_name = имя открываемого файла
- access_mode = режим открытия файла. Он может быть: для чтения, записи и т. д. По умолчанию используется режим чтения ( r ), если другое не указано. Далее полный список режимов открытия файла
Пример
Создадим текстовый файл example.txt и сохраним его в рабочей директории.
Следующий код используется для его открытия.
f = open(‘example.txt’,’r’) # открыть файл из рабочей директории в режиме чтения fp = open(‘C:/xyz.txt’,’r’) # открыть файл из любого каталога
В этом примере f — переменная-указатель на файл example.txt .
Следующий код используется для вывода содержимого файла и информации о нем.
>>> print(*f) # выводим содержимое файла This is a text file. >>> print(f) # выводим объект _io.TextIOWrapper name=’example.txt’ mode=’r’ encoding=’cp1252′>
Стоит обратить внимание, что в Windows стандартной кодировкой является cp1252 , а в Linux — utf-08 .
Закрытие файла
Метод close()
После открытия файла в Python его нужно закрыть. Таким образом освобождаются ресурсы и убирается мусор. Python автоматически закрывает файл, когда объект присваивается другому файлу.
Существуют следующие способы:
Способ №1
Проще всего после открытия файла закрыть его, используя метод close() .
f = open(‘example.txt’,’r’) # работа с файлом f.close()
После закрытия этот файл нельзя будет использовать до тех пор, пока заново его не открыть.
Текстовые файлы(считывание данных с файла)
Способ №2
Также можно написать try/finally , которое гарантирует, что если после открытия файла операции с ним приводят к исключениям, он закроется автоматически.
Без него программа завершается некорректно.
Вот как сделать это исключение:
f = open(‘example.txt’,’r’) try: # работа с файлом finally: f.close()
Файл нужно открыть до инструкции try , потому что если инструкция open сама по себе вызовет ошибку, то файл не будет открываться для последующего закрытия.
Этот метод гарантирует, что если операции над файлом вызовут исключения, то он закроется до того как программа остановится.
Способ №3
Инструкция with
Еще один подход — использовать инструкцию with , которая упрощает обработку исключений с помощью инкапсуляции начальных операций, а также задач по закрытию и очистке.
В таком случае инструкция close не нужна, потому что with автоматически закроет файл.
Вот как это реализовать в коде.
with open(‘example.txt’) as f: # работа с файлом
Чтение и запись файлов в Python
В Python файлы можно читать или записывать информацию в них с помощью соответствующих режимов.
Функция read()
Функция read() используется для чтения содержимого файла после открытия его в режиме чтения ( r ).
Синтаксис
file.read(size)
- file = объект файла
- size = количество символов, которые нужно прочитать. Если не указать, то файл прочитается целиком.
Пример
>>> f = open(‘example.txt’,’r’) >>> f.read(7) # чтение 7 символов из example.txt ‘This is ‘
Интерпретатор прочитал 7 символов файла и если снова использовать функцию read() , то чтение начнется с 8-го символа.
>>> f.read(7) # чтение следующих 7 символов ‘ a text’
Функция readline()
Функция readline() используется для построчного чтения содержимого файла. Она используется для крупных файлов. С ее помощью можно получать доступ к любой строке в любой момент.
Пример
Создадим файл test.txt с нескольким строками:
This is line1. This is line2. This is line3.
Посмотрим, как функция readline() работает в test.txt .
>>> x = open(‘test.txt’,’r’) >>> x.readline() # прочитать первую строку This is line1. >>> x.readline(2) # прочитать вторую строку This is line2. >>> x.readlines() # прочитать все строки [‘This is line1.’,’This is line2.’,’This is line3.’]
Обратите внимание, как в последнем случае строки отделены друг от друга.
Функция write()
Функция write() используется для записи в файлы Python, открытые в режиме записи.
Если пытаться открыть файл, которого не существует, в этом режиме, тогда будет создан новый.
Синтаксис
file.write(string)
Пример
Предположим, файла xyz.txt не существует. Он будет создан при попытке открыть его в режиме чтения.
>>> f = open(‘xyz.txt’,’w’) # открытие в режиме записи >>> f.write(‘Hello n World’) # запись Hello World в файл Hello World >>> f.close() # закрытие файла
Переименование файлов в Python
Функция rename()
Функция rename() используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.
import os os.rename(src,dest)
- src = файл, который нужно переименовать
- dest = новое имя файла
Пример
>>> import os >>> # переименование xyz.txt в abc.txt >>> os.rename(«xyz.txt»,»abc.txt»)
Текущая позиция в файлах Python
В Python возможно узнать текущую позицию в файле с помощью функции tell() . Таким же образом можно изменить текущую позицию командой seek() .
Пример
>>> f = open(‘example.txt’) # example.txt, который мы создали ранее >>> f.read(4) # давайте сначала перейдем к 4-й позиции This >>> f.tell() # возвращает текущую позицию 4 >>> f.seek(0,0) # вернем положение на 0 снова
Методы файла в Python
file.close() | закрывает открытый файл |
file.fileno() | возвращает целочисленный дескриптор файла |
file.flush() | очищает внутренний буфер |
file.isatty() | возвращает True, если файл привязан к терминалу |
file.next() | возвращает следующую строку файла |
file.read(n) | чтение первых n символов файла |
file.readline() | читает одну строчку строки или файла |
file.readlines() | читает и возвращает список всех строк в файле |
file.seek(offset[,whene]) | устанавливает текущую позицию в файле |
file.seekable() | проверяет, поддерживает ли файл случайный доступ. Возвращает True , если да |
file.tell() | возвращает текущую позицию в файле |
file.truncate(n) | уменьшает размер файл. Если n указала, то файл обрезается до n байт, если нет — до текущей позиции |
file.write(str) | добавляет строку str в файл |
file.writelines(sequence) | добавляет последовательность строк в файл |
Источник: pythonru.com
Файлы в Паскаль. Чтение и запись данных
В большинстве языков программирования, в том числе Pascal, предусмотрены инструменты для сохранения информации на внешних носителях (жесткий диск также относится к внешнему запоминающему устройству), а также ее извлечению (чтению) оттуда.
Данные, хранящиеся на внешних устройствах, организовываются в виде файлов. Под файлом понимается область памяти на внешнем запоминающем устройстве, хранящая (содержащая) определенную информацию. В эту конкретную область памяти можно помещать данные (операции ввода, записи), так и извлекать их оттуда (операции вывода, чтения).
В языке программирования Паскаль для работы с данными, хранящимися в файлах, должны быть определены переменные файлового типа, через которые далее обеспечивается связь между файлом на диске и программой.
Типизированный файл в Паскале интерпретируется как последовательность (список) значений определенного (одного и того же) базового типа. Например, если в файле на диске хранится список вещественных чисел, то переменная в языке Pascal, через которую можно получить к ним доступ, может быть описана так:
Файловый тип определяется служебными словами file of, далее идет указание базового типа, который может быть любым, кроме файлового.
Тут следует понимать такую особенность. В файле могут храниться числа, но в программе они могут быть интерпретированы как символы или строки. Все зависит от выбранного базового типа при определении файловой переменной.
При определении переменной файлового типа также в программе появляется скрытый (неявный) текущий указатель файла. Его назначение – указывать на конкретный элемент файла (обеспечивать доступ к нему).
В языке программирования Паскаль все действия с файлом (чтение, запись) производятся поэлементно. Действия совершаются именно над тем элементом файла, на который указывает текущий указатель файла. После того как действие будет завершено, указатель перемещается к следующему элементу. Все элементы файла пронумерованы, начиная с нуля.
Операции с файловыми переменными включают:
- установочные и завершающие операции;
- ввод и вывод;
- перемещение по файлу;
- специальные операции.
Создание файла и запись данных в него
var f: file of char; c: char; i, n: byte; begin assign(f, ‘file.txt’); rewrite(f); write(‘Количество символов: ‘); readln(n); for i := 1 to n do begin write(‘Введите символ: ‘); readln(c); write(f, c); end; close (f); end.
Процедура assign обеспечивает связь файловой переменной программы с реальным файлом на диске. Первым аргументом указывается переменная, вторым – адресное имя файла.
Процедура rewrite открывает файл в режиме записи, т.е. мы можем вводить данные в файл с помощью процедуры вывода из программы write. Если указанный файл отсутствует на диске, то он будет создан. Если файл существует и содержит данные, то все они будут удалены и заменены в дальнейшем новыми (перезаписаны).
Запись данных в файл – результат выполнения процедуры write(f, c) , где f – файловая переменная, а с – выводимый из программы, но вводимый в файл символ.
В конце требуется закрыть файл и «освободить» переменную f . Это делается с помощью процедуры close.
Чтение данных из файла
var f: file of char; c: char; begin assign(f, ‘file.txt’); reset(f); while not eof(f) do begin read(f, c); writeln(c); end; close (f); end.
Процедура reset открывает файл для чтения. Т.е. мы можем в дальнейшем в программе извлекать данные из файла с помощью процедуры read.
Данные извлекаются «порциями» базового типа. В данном примере – это char (символьный тип).
Чтение данных из файла продолжается до тех пор, пока не будет достигнут конец файла. Функция eof проверяет достигнут ли конец переданного ей в качестве аргумента файла и, если достигнут, возвращает true . Выражение not eof(f) проверяет обратное – то, что конец файла еще не достигнут.
Источник: pas1.ru
Текстовые файлы
Текстовый файл в Паскале представляет собой последовательность строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой. При создании текстового файла в конце каждой строки ставится специальный признак EOLN(EndOfLiNe– конец строки), а в конце файла – признакEOF(конец файла). Эти признаки можно протестировать с помощью одноименных логических функций.
При формировании текстовых файлов используются следующие системные соглашения:
EOLN– последовательность кодовASCII#13 (CR– возврат каретки) и #10 (LF– перевод строки);
EOF– код #26 стандартаASCII.
Описание текстового файла в Паскале задается стандартным типом Text, например,
var f1:Text;
Открыть текстовый файл можно в трех режимах: для записи с помощью процедуры Rewrite(), для чтения с помощью процедурыReset() и для добавления в конец с помощью процедурыAppend(). При этом файловая переменная должна быть предварительно связана с файлом или логическим устройством с использованием процедурыAssign.В текстовые файлы, открытые процедурой Reset, нельзя записывать информацию. Можно лишь из одного файла читать, а в другой записывать информацию.Можно также добавить новые строки в конец существующего тестового файла, открыв файл с помощью процедурыAppend.
К текстовым файлам, как и к типизированным, применяются стандартные процедуры Close() – закрыть файл;Rename() – переименовать файл;Erase() – уничтожить файл. Аналогично работают функцииEOF() иIOResult.К текстовым файлам нельзя применять процедуры Seek, Filesize и Filepos.
Для ввода и вывода информации из текстовых файлов применяются процедуры Read(Readln) иWrite(Writeln), которые абсолютно аналогичны операторам ввода с клавиатуры и вывода на экран. Единственное отличие состоит в том, что для работы с дисковым файлом или логическим устройством первым параметром в списке вывода указывается файловая переменная.
Формат обращения к процедуре чтения данных имеет вид:
Здесь – список ввода: последовательность из одной или более переменных типа char,string, а также любого целого или вещественного типа.
При вводе переменных типа charвыполняется чтение одного символа из файла и его присваивание переменной. Если перед выполнением чтения указатель файла достиг конца очередной строки, то результатом чтения будет символCR(код #13), а если достигнут конец файла, то – символEOF(код #26). При вводе с клавиатуры символCRвводится при нажатии на клавишу «Enter», а символEOF– при одновременном нажатии клавиш «Ctrl» и «Z».
При вводе переменных типа string количество считанных процедурой и помещенных в строку символов равно максимальной длине строки, если не встретились символыCRилиEOF(сами эти символы в строку не помещаются). Если количество символов во входном потоке данных больше максимальной длины строки, «лишние» символы до конца строки отбрасываются, а новое обращение кReadвозвращает пустую строку.Процедура Read не в состоянии прочесть последовательность строк, в этом случае нужно использовать процедуру Readln. ПроцедураReadlnпосле считывания последней переменной пропускает оставшуюся часть строки до маркераEOLN, поэтому следующее обращение к процедуре вызовет считывание информации следующей строки.
Процедура Writeобеспечивает вывод информации в текстовый файл или передачу ее на логическое устройство. Формат обращения:
Здесь – список вывода: последовательность из одного или более выражений типа char,string,boolean, а также любого целого или вещественного типа.
Процедура вывода информации в дисковый файл полностью аналогична выводу на экран. Процедура Writeln, в отличие отWrite, по завершению списка вывода помещает в файл маркер конца строки.Для создания файла, состоящего из нескольких строк, необходимо использовать процедуру Writeln.
Для текстовых файлов, кроме логической функции EOF, определена дополнительная функцияEOLN(), которая возвращает значениеtrue, если во входном текстовом файле достигнут маркер конца строки.
Для практической работы с текстовыми файлами удобнее всего читать их по строкам, используя переменную типа string (длина строки текстового файла не может превышать 255 символов). Например, следующая программа выводит на экран содержимое текстового файла с заданным именем.
Program read_text_file;
var f: text;
name: string[80];
writeln(‘Введите имя файла’);
while not EOF(f) do
Источник: studfile.net