Видеокурс выложен на сайте Altube.ru вместо Youtube и плеер Altube не поддерживает субтитры. Прошу решить вопрос о предоставлении русских субтитров в этом англоязычном видеокурсе. |
Файлы
По ссылке youtube выложено видео с русскими титрами.
14.1. Введение
До сих пор мы учились тому, как писать программы и сообщать о наших намерениях центральному процессору (Central Processing Unit), используя условные инструкции, функции и итерации. Мы учились, как создавать и использовать структуры данных в оперативной памяти (Main Memory). В CPU и памяти работает и выполняется наше программное обеспечение (ПО).
Но если вы помните из нашего обсуждения архитектуры оборудования, одно выключение питания и все хранящееся в CPU или оперативной памяти стирается. До этого момента наши программы имели временное развлекательное назначение для изучения Python.
В этой главе мы начинаем работать с вторичной памятью (Secondary Memory) или файлами. Вторичная память не очищается, когда выключается электричество. В случае с USB-флешками, данные можно на них записать, после этого USB-флешки могут быть удалены из системы и перенесены в другую систему.
Мы сосредоточимся на чтении и записи текстовых файлов, таких, которые создаются в текстовом редакторе. Позже мы рассмотрим, как работать с файлами баз данных, такими, как бинарные файлы, специально разработанные для чтения и записи через ПО баз данных.
14.2. Открытие файлов
Когда мы хотим прочитать или записать файл (скажем, на жестком диске), во-первых мы должны открыть этот файл. Об открытии файла сообщается операционной системе (ОС), которая знает, где хранятся данные для каждого из файлов. Когда вы открываете файл, вы обращаетесь к ОС, чтобы найти файл по имени и удостовериться, что файл существует. В следующем примере мы открываем файл mbox.txt, который должен находиться в той же папке, откуда запускается Python. Скачать файл можно по ссылке:
http://pycode.ru/files/python/mbox.txt
>>> fhand = open('mbox.txt') >>> print(fhand) <_io.TextIOWrapper name='mbox.txt' mode='r' encoding='cp1251'>
Если функция open завершится успешно, то ОС вернет дескриптор файла (file handle). Дескриптор файла не является действующими данными, содержащимися в файле, это "обработчик", который мы можем использовать для чтения данных. У вас есть дескриптор, если запрашиваемый файл существует и имеет надлежащие права на чтение.
Если файл не существует, функция open выдаст ошибку с указанием причины и вы не получите дескриптор с доступом к содержимому файла:
>>> fhand = open('stuff.txt') Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> fhand = open('staff.txt') IOError: [Errno 2] No such file or directory: 'staff.txt'
Позже мы воспользуемся инструкциями try и except, чтобы сделать более изящной обработку ситуации, когда мы открываем файл, который не существует.
14.3. Текстовый файл и строки
Текстовый файл можно представить как последовательность строк. В качестве примера рассмотрим текстовый файл, который содержит записи почтовой активности от различных лиц в команде разработчиков проекта с открытым исходным кодом:
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008 Return-Path: <postmaster@collab.sakaiproject.org> Date: Sat, 5 Jan 2008 09:12:18 -0500 To: source@collab.sakaiproject.org From: stephen.marquard@uct.ac.za Subject: [sakai] svn commit: r39772 - content/branches/ Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39772 ...
Полная версия файла доступна по ссылке:
http://pycode.ru/files/python/mbox.txt и сокращенная версия
http://pycode.ru/files/python/mbox-short.txt. Это файлы, которые содержат множество почтовых сообщений в стандартном формате. Строки, которые начинаются с "From " отделяют сообщение и строки, которые начинаются с "From:" являются частью сообщения. Более подробная информация по ссылке: en.wikipedia.org/wiki/Mbox.
Чтобы разбить файл на строки, существует специальный символ, который представляет "конец строки" и называется символом новой строки.
В Python мы представляем символ новой строки, как строковую константу '\n'. Даже не смотря на то, что это выглядит как два символа - на самом деле один символ. Когда мы смотрим переменную, введя "stuff" в интерпретаторе, она отображается с \n в строке, но когда мы используем функцию print - видим, что строка разбилась на две по символу новой строки.
>>> stuff = 'Hello\nWorld!' >>> stuff 'Hello\nWorld!' >>> print(stuff) Hello World! >>> len(stuff) 12 >>>
Также можно видеть, что длина строки 'Hello\nWorld!' составляет 12 символов, т.к. новый символ считается за один.
Поэтому, когда мы смотрим на строки в файле, необходимо представлять (!), что есть специальные невидимые символы в конце каждой строки, которые обозначают конец строки.
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008\n Return-Path: <postmaster@collab.sakaiproject.org>\n Date: Sat, 5 Jan 2008 09:12:18 -0500\n To: source@collab.sakaiproject.org\n From: stephen.marquard@uct.ac.za\n Subject: [sakai] svn commit: r39772 - content/branches/\n Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39772\n ...
Таким образом, символ новой строки отделяет символы в файле внутри строк.