Вы находитесь на странице: 1из 18

Урок 6

ФАЙЛЫ
В ОПЕРАЦИОННОЙ
СИСТЕМЕ
И РАБОТА С НИМИ.
ПРИЛОЖЕНИЕ
«КАМУФЛЯЖ
И ШПИОНАЖ»

Содержание
Файлы в операционной системе...............................3
Приложение
«Камуфляж и шпионаж»............................................ 13

В ЭТОМ УРОКЕ ИСПОЛЬЗУЮТСЯ ВИДЕОМАТЕРИАЛЫ.


Каждый раз, когда вы видите на странице иллюстрацию со
значком PLAY поверх нее — это видео. Щелкните по нему,
чтобы просмотреть видео.

2
ФАЙЛЫ В ОПЕРАЦИОННОЙ СИСТЕМЕ И РАБОТА С НИМИ

Файлы
в операционной системе
Работу с компьютером сложно представить без
операционной системы, с которой работает каждая
программа. Поэтому для удобной коммуникации с
ней в Python есть стандартная библиотека os.
Известно, что для получения информации необхо-
димо пройти определенный маршрут, который принято
называть path (путь). Он, в свою очередь, может быть
абсолютным или относительным. Абсолютный – тот,
что начинается с корневых директорий системы, при-
мером которых могут быть системные диски операци-
онной системы Windows. Относительный путь – тот,
что прокладывается от места, в котором располагается
программа или пользователь.
Пройтись по указанному пути можно с помощью
функции walk(), куда он передается в качестве пара-
метра.
Запишем:

import os

path = "C:\Windows\Web"

for path, dirnames, filenames in os.walk(path):


print(f"path – {path}")
print(f"dirnames – {dirnames}")
print(f"filenames – {filenames}")

3
Урок 6

Получим (видео 1):

Видео 1

Как видим, пройдясь по указанному пути функцией


walk(), мы поочередно получили пути и названия всех
файлов и директорий, содержащихся в нем. Но в разных
операционных системах путь указывается по-разному,
как быть в этом случае?
Корректную работу с ними обеспечит модуль
os.path. А для того, чтобы путь указывался корректно
независимо от системы, необходимо передать его в ка-
честве аргумента в функцию normpath(). Например, в
ОС Linux в качестве знака препинания пути использу-
ется /. Заменим \ на / в нашем коде, имитируя путь с
Linux и передадим его вышеуказанной функции:
4
ФАЙЛЫ В ОПЕРАЦИОННОЙ СИСТЕМЕ И РАБОТА С НИМИ

import os

path = os.path.normpath("C:/Windows/Web")

for path, dirnames, filenames in os.walk(path):


print(f"path – {path}")
print(f"dirnames – {dirnames}")
print(f"filenames – {filenames}")

Получим (видео 2):

Видео 2

Как видно, путь указывается строкой, но часто


возникает вопрос его модификации. Конечно, можно
5
Урок 6

добавить строки и получить новый путь, но лучше вос-


пользоваться функцией join(), которая не только до-
бавит их, а и установит корректный знак препинания, в
соответствии с операционной системой (видео 3):

import os

dir_1 = "Windows"
dir_2 = "Web"
path = os.path.join(dir_1, dir_2)
print(path)

Видео 3

Кроме того, с помощью функции isabs() можно


проверить, является ли путь абсолютным. А с помощью
функций isfile(), isdir(), islink() узнаем, ведет
путь к файлу, директории или ссылке (видео 4):
6
ФАЙЛЫ В ОПЕРАЦИОННОЙ СИСТЕМЕ И РАБОТА С НИМИ

import os
path = os.path.normpath("C:\\Windows\\Web")
print(os.path.isabs(path))
print(os.path.isfile(path))
print(os.path.isdir(path))
print(os.path.islink(path))

Видео 4

За создание директорий в os отвечает функция


mkdir(), куда передается путь, последней частью кото-
рого и выступает название новой директории (см. видео
5 на стр. 8).
А удалить директории позволит функция rmdir(),
в которую так же передается путь (см. видео 6).

7
Урок 6

Видео 5

Видео 6

Сейчас, обладая знаниями, как добраться до ин-


формации, научимся открывать файлы.
8
ФАЙЛЫ В ОПЕРАЦИОННОЙ СИСТЕМЕ И РАБОТА С НИМИ

Для этого необходимо воспользоваться встроенной


функцией open(). Первым аргументом передадим путь
к файлу. А вот второй аргумент указывает на режим от-
крытия, основными из которых являются:
■■ "r" – открытие файла для чтения;
■■ "w" – открытие файла на запись. В то же время вся
предыдущая информация из файла удаляется;
■■ "a" – открытие файла на дозаписывание. При этом
режиме предыдущая информация будет сохранена.
Стоит заметить, если файла нет, то при режиме чте-
ния возникнет ошибка, а при режимах записи и дозапи-
сывания необходимый файл будет создан.
После работы с файлом его необходимо закрыть,
чтобы ОС завершила работу с ним:

file = open("file.txt", "w")


file.write("Hello world!")
file.close()
file = open("file.txt", "a")
file.write(" Hello user!")
file.close()
file = open("file.txt", "r")
print(file.read())
file.close()

Запустим код, результат выполнения которого, по-


казан в видео 7 на странице 10.

9
Урок 6

Видео 7

Но функция open() принимает еще один важный


параметр – кодирование файла (encoding). Общим
стандартом считается кодирование UTF-8, но если при
нем информация изображается некорректно, следует
изменить именно этот параметр.
Конечно, можно присваивать переменной открытие
файла, потом работать с ней, а после работы закрывать
файл. Но в Python доступен более удобный синтаксис,
реализованный в операторе with. Только посмотрите,
насколько понятнее станет работа с его использованием
(видео 8):
with open("file.txt", "w") as file:
file.write("Hello world!")

with open("file.txt", "a") as file:


file.write(" Hello user!")

with open("file.txt", "r") as file:


print(file.read())

10
ФАЙЛЫ В ОПЕРАЦИОННОЙ СИСТЕМЕ И РАБОТА С НИМИ

Видео 8

Работу с файлами мы освоили, но часто возни-


кает необходимость их переименовать или пере-
местить.
В этом помогут такие функции из модуля os:
■■ rename(path_1, path_2) – переименовывает и пе-
ремещает данные из path_1 в path_2 (видео 9).

Видео 9

11
Урок 6

■■ renames(path_1, path_2) – то же самое, но если


директории становятся пустыми, удаляет их. Если
необходимой директории нет, создает ее (видео 10).

Видео 10

■■ replace(path_1, path_2) – переименовывает и пе-


ремещает данные из path_1 в path_2. Если данные с
таким названием уже есть, перезаписывает их (видео
11).

Видео 11

12
ФАЙЛЫ В ОПЕРАЦИОННОЙ СИСТЕМЕ И РАБОТА С НИМИ

А для получения информации о дате создания или


последней правки можно воспользоваться функциями
getctime() и getmtime() модуля path (видео 12):

Видео 12

Как видно, обе функции вернули огромное число.


Именно столько секунд прошло с начала эпохи, которая
по договоренности программистов началась 1 января
1970 года.
Сейчас оставим полученные данные как есть, а уже
на следующем занятии приведем их к привычному фор-
мату даты.

Приложение
«Камуфляж и шпионаж»
Самое время использовать приобретенные навы-
ки и разработать полезное приложение, которое,
как шпион (рис. 1), создаст файл с названиями всех
файлов и директорий указанного пути.
13
Урок 6

Рисунок 1

Начнем с того, что импортируем библиотеку os и


объявим создание функции file_collector(), вход-
ным параметром которой будет путь. Первым шагом в
функции приведем путь к корректному виду:
14
ФАЙЛЫ В ОПЕРАЦИОННОЙ СИСТЕМЕ И РАБОТА С НИМИ

import os

def file_collector(path):
path = os.path.normpath(path)

Следующим шагом создадим словарь, куда будем


помещать названия всех файлов и директорий, и запу-
стим функцию walk(), которая пройдет по этому пути.
В то же время воспользуемся циклом for, чтобы полу-
чить названия всех файлов:

result = {"dirs":[], "files": []}


for path, dirnames, filenames in os.walk(path):

Получив внутри цикла списки с названиями файлов


и директорий, необходимо пройтись по ним, добавив
каждое в соответствующий список словаря result:

for dir in dirnames:


result["dirs"].append(dir)
for file in filenames:
result["files"].append(file)

Необходимая информация получена, следовательно


время поработать над результатом. Запишем его в файл
skiper.txt.
Но просто записать словарь в файл не очень краси-
во, поэтому оформим запись, добавив толкования и за-
писывая каждое название с новой строки:
15
Урок 6

with open("skiper.txt","w") as file:


file.write("\n{:-<50}\n".format("Directories"))
for dir in result["dirs"]:
file.write(f"\t{dir}\n")
file.write("\n{:-<50}".format("Files"))
for files in result["files"]:
file.write(f"\t{files}\n")

Программа готова, пора ее запустить (видео 13)!


Готовый код программы примет такой вид:

import os

def file_collector(path):
path = os.path.normpath(path)
result = {"dirs":[], "files": []}
for path, dirnames, filenames in os.walk(path):
for dir in dirnames:
result["dirs"].append(dir)
for file in filenames:
result["files"].append(file)
with open("skiper.txt","w") as file:
file.write("\n{:-<50}\n".format("Directories"))
for dir in result["dirs"]:
file.write(f"\t{dir}\n")
file.write("\n{:-<50}".format("Files"))
for files in result["files"]:
file.write(f"\t{files}\n")

16
ФАЙЛЫ В ОПЕРАЦИОННОЙ СИСТЕМЕ И РАБОТА С НИМИ

path = "F:\\Content"

file_collector(path)

Видео 13

На этом занятии мы получили навыки работы с опе-


рационными системами. Вышли за рамки програм-
мы, создавая и модифицируя файлы и директории,
а полученные знания закрепили созданием полезно-
го приложения.
17
Урок 6
Файлы в операционной системе
и работа с ними. Приложение
«Камуфляж и шпионаж»

© Компьютерная Академия ШАГ


www.itstep.org

Все права на охраняемые авторским правом фото-, аудио- и видеопроизведения,


фрагменты которых использованы в материале, принадлежат их законным владель-
цам. Фрагменты произведений используются в иллюстративных целях в объеме,
оправданном поставленной задачей, в рамках учебного процесса и в учебных целях,
в соответствии со ст. 1274 ч. 4 ГК РФ и ст. 21 и 23 Закона Украины «Про авторське
право і суміжні права». Объем и способ цитируемых произведений соответствует
принятым нормам, не наносит ущерба нормальному использованию объектов
авторского права и не ущемляет законные интересы автора и правообладателей.
Цитируемые фрагменты произведений на момент использования не могут быть
заменены альтернативными, не охраняемыми авторским правом аналогами, и
как таковые соответствуют критериям добросовестного использования и честного
использования.
Все права защищены. Полное или частичное копирование материалов запрещено.
Согласование использования произведений или их фрагментов производится
с авторами и правообладателями. Согласованное использование материалов
возможно только при указании источника.
Ответственность за несанкционированное копирование и коммерческое исполь-
зование материалов определяется действующим законодательством Украины.