Неужели не нашлось русских специалистов, чтобы записать курс по пайтону ? Да, можно включить переводчик и слушать с переводом, но это что? Это кто-то считает хорошим и понятным курсом для начинающих? |
Файлы
Смотреть на youtube
Для решения задач, возникающих в прикладной области, программист ищет подходящий алгоритм и подходящие структуры данных. Списки, кортежи, словари, множества - эти структуры данных используются во многих задачах при реализации алгоритмов. Конечно, часто используются и другие структуры данных, задаваемые в пакетах Python или специально спроектированные с учетом особенности решаемой задачи. Все эти структуры данных создаются в процессе выполнения программы и исчезают по окончании сеанса работы с программой.
Но мощь компьютера во многом основана на том, что данные, создаваемые в процессе работы компьютера, можно сохранять во внешней памяти и затем многократно использовать их в разнообразных программах в качестве входных данных. Компьютер - это машина по производству и переработке данных.
Объекты, хранящие данные во внешней памяти, называются файлами. Для большинства практических задач источником входных данных являются файлы. Данные, созданные в результате выполнения программы, также сохраняются в файлах. Файлы Python разделяются на два класса - бинарные и текстовые. Бинарный файл - это последовательность байтов. Текстовый файл - это последовательность строк текста.
При выводе результатов в файл данные, представленные разнообразными структурами данных, преобразуются в последовательность байтов или строк текста в зависимости от типа файла.
При вводе исходных данных из файла происходит обратное преобразование - последовательность байтов или строк текста преобразуются в нужный формат, задаваемый соответствующей структурой данных.
Как и полагается, Python позволяет работать с файлами - бинарными и текстовыми. В этой лекции мы рассмотрим работу с текстовыми файлами - наиболее часто используемым типом файлов. Мы рассмотрим, как файлы создаются, как сохраняются в файлах данные, представленные различными структурами данных, как данные, представленные в файле, преобразуются в данные соответствующих структур.
Создание файла. Открытие и закрытие файла
Когда мы говорим о файлах, то следует различать:
- Физический файл - коллекцию данных на внешнем носителе, имеющую имя и сохраняемую в некотором каталоге. Обычно, в качестве внешнего носителя выступает жесткий диск, встроенный в компьютер.
- Логический файл - объект языка.
При открытии файла устанавливается связь между логическим и физическим файлом. Операции, выполняемые в программе над логическим файлом, фактически выполняются над физическим файлом. При закрытии файла связь между логическим файлом и физическим файлом разрывается.
Файл, как объект языка, создается при вызове метода open. В процессе выполнения метода устанавливается связь между логическим и физическим файлами.
Метод имеет два строковых аргумента - первый задает путь к файлу, второй - его статус. Если в качестве первого аргумента указать только имя файла с соответствующим уточнением txt или bin, то файл ищется в том же каталоге, где находится выполняемая программа.
Статус открываемого файла задается строкой обычно из одного символа, хотя допускается и комбинация символов. Символы, задающие статус, имеют следующее значение:
r - от (read) файл открывается для чтения. Физический файл должен существовать в указанном месте.
w - от (write) физический файл открывается для записи. Если файл существует, то он перезаписывается, - старые записи удаляются. Если файл не существует, то он создается;
a - от (append) файл открывается для добавления в конец файла. Новые записи добавляются в конец существующего файла. Если файл не существует, то он создается.
x - новый файл, создаваемый для записи. Если файл существует, то возникнет ошибка.
b - от (binary) задает тип бинарного файла. Символ задается в комбинации с другими символами статуса. Комбинация 'b + r' или просто 'br' открывает существующий бинарный файл для чтения. Комбинация 'b + w' ('bw') в существующем файле удаляет содержимое, так что длина физического файла становится равной нулю байтов.
t - от (text) задает тип текстового файла. По умолчанию файл считается текстовым и имеет статус 'rt'.
Открыв файл, в зависимости от статуса, над ним выполняются те или иные операции по чтению или записи данных. Для текстовых файлов работа идет со строками текста, для бинарных файлов - с байтами. По окончании работы следует файл закрыть, выполнив метод close.
Хотя Python, будучи интерпретатором, чаще всего автоматически закрывает файл по окончании работы с ним, но правильная стратегия работы с файлами во всех языках программирования состоит в том, что следует явно закрывать файл, вызывая метод close, не надеясь на действия по умолчанию. При выполнении этого метода закрывается физический файл, программа освобождает этот ресурс и физический файл может использоваться в других приложениях.
Операции над файлом, будучи операциями над внешним носителем, являются медленными операциями в сравнении с операциями над оперативной памятью компьютера. Поэтому общепринятой практикой при работе с файлами является буферизация данных, когда при открытии файла в оперативной памяти создается буфер, в который пишутся данные, помещаемые в файл. По заполнении буфера данные из буфера переносятся во внешнюю память. Буферизация позволяет ускорить выполнение операций над файлом.
Нужно учесть, что по окончании работы с файлом часть данных может находиться в буфере. Как правило, при закрытии файла буфер автоматически освобождается, перенося данные из буфера в файл. Поскольку полной гарантии в освобождении буфера нет, многое зависит от исполняемой среды программирования, то перед закрытием файла следует явно выполнить метод flush. Этот метод специально спроектирован для переноса в файл данных из буфера, возможно используемого при работе с файлом.
Рассмотрим пример создания файлов с разным статусом и работы с ними на примере файлов, содержащих несколько записей со строковыми данными:
#Работа с текстовыми файлами def test1(): #Открытие файлов #запись one = open("One.txt", 'w') one.write("запись_1" + "\n") one.write("запись_2" + "\n") one.close() print("файл One создан!") #чтение one = open("One.txt", 'r') print(one.readline()) print(one.readline()) one.close() #перезапись one = open("One.txt", 'w') one.write("запись_3" + "\n") one.write("запись_4" + "\n") one.close() one = open("One.txt", 'r') print(one.readline()) print(one.readline()) one.close() #создание нового файла two = open("Two.txt", 'x') two.write("запись_5" + "\n") two.write("запись_6" + "\n") two.close() print("файл Two создан!") #дозапись two = open("Two.txt", 'a') two.write("запись_7"+ "\n") two.write("запись_8" + "\n") two.close() #чтение two = open("Two.txt", 'r') print(two.readline()) print(two.readline()) print(two.readline()) print(two.readline()) two.flush() two.close() test1()
Результаты работы:
В каталоге, где хранится программный код, созданы два текстовых файла с именами One и Two. В файле One две строки: запись_3 и запись_4. В файле Two - четыре строки.
Заметьте, при повторном запуске этого теста возникнет ошибка, если предварительно не удалить созданный файл Two.