diff --git a/content/os.rst b/content/os.rst index 7791bd7..122dc2d 100644 --- a/content/os.rst +++ b/content/os.rst @@ -1,295 +1,506 @@ Модуль os в Python -#################### -:date: 2022-04-19 -:summary: Лаба + +:date: 2022-05-07 +:summary: Лабораторная работа "Модуль OS Python на Linux" :status: published -:author: Кауров Р.О. +:author: Корчевая О. Е. + +.. contents:: Оглавление + :depth: 2 + +Модуль os позволяет Python выполнять многие операции с файлами и папками, которые вы обычно выполняете в командной строке Linux. Модуль предоставляет функции для работы с операционной системой, при этом поведение функций не зависит от ОС. Модуль так же позволяет работать с файлами, папками, а так же со многими другими объектами операционной системы, как, например, процессы или переменные окружения. Познакомимся с самыми популярнфми функциями. + +**В ходе данной лабораторной работы мы научимся:** +1. Работать со значениями среды -Модуль os предоставляет функции для работы с операционной системой, при этом поведение функций не зависит от ОС, поэтому программы будут переносимыми. Здесь я расписал часто используемые из них. Модуль позволяет работать с файлами, папками, а так же со многими другими объектами операционной системы, как, например, процессы или переменные окружения. +2. Менять каталоги и находить тот, который в данный момент является рабочим -Давайте разберем функции для работы с файлами: +3. Создавать и удалять папки и файлы -Работа с файлами -================ +4. Переименовывать папки и файлы + +5. Открывать файл в соответствующей ему программе + +6. Работать с путями + +Для начала работы необходимо подключить модуль обычной командой import .. code-block:: python - os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True) + >>> import os + +Основные функции для работы с модулем +########################################################## -Функция меняет права доступа к объекту (mode - восьмеричное число) +os.name +========================================================= + +Модуль os обладает как вызываемыми функциями, так и обычными значениями. В случае с os.name, речь идет только о значениях. При доступе к os.name, вы получите информацию о том, с какой платформой вы работаете. Вам откроются следующие значения: ``‘posix’``, ``‘nt’``, ``‘os2’``, ``‘ce’``, ``‘java’```. Давайте посмотрим на то, что выйдет, если запустить его на Mac OS: .. code-block:: python - os.remove(path, *, dir_fd=None) + >>> os.name + + 'posix' + +Это говорит нам о том, что наш экземпляр Python работает в окне Mac OS. -Удаляет путь к файлу. Если будет папка, функция вернет IsADirectoryError. На Windows почему-то файл не удаляется и выбрасывает ошибку, если смотреть в дебаггере. +os.environ / os.getenv( ) / os.putenv( ) +========================================================= -.. code-block:: python +Значение ``os.environ`` известно как объект мэппинга (сопоставления), который работает со словарем переменных пользовательской среды. Возможно вы не знали, но каждый раз, когда вы пользуетесь своим компьютером, некоторые переменные среды уже установлены. - os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) -Переименовывает файл или директорию из src в dst. Не очень разобрался, что дескриптор каталога, но, по-видимому, это поддерживает переименование файла +Это дает вам полезную информацию, такую как количество процессоров, тип ОЗУ, имя компьютера, и так далее. Посмотрим, что мы сможем узнать о нашем компьютере: -.. code-block:: python +.. code-block:: python - os.renames(old, new) + >>> print(os.environ) + +.. code-block:: txt + + environ({'TERM_PROGRAM': 'Apple_Terminal', + 'SHELL': '/bin/bash', + 'TERM': 'xterm-256color', + 'TMPDIR': '/var/folders/hv/p9v314d106z3tqjyxvn5hfm40000gn/T/', + 'CONDA_SHLVL': '0', + 'TERM_PROGRAM_VERSION': '433', + 'TERM_SESSION_ID': '156EFB08-2191-40AC-89C8-A80DA200875F', + 'USER': 'evgenij', + 'CONDA_EXE': '/Users/evgenij/opt/anaconda3/bin/conda', + 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.lJbr3lVPMb/Listeners', + '_CE_CONDA': '', + 'PATH': '/Users/evgenij/opt/anaconda3/condabin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin', + 'PWD': '/Users/evgenij', + 'LANG': 'ru_RU.UTF-8', + 'XPC_FLAGS': '0x0', + '_CE_M': '', + 'XPC_SERVICE_NAME': '0', + 'SHLVL': '1', + 'HOME': '/Users/evgenij', + 'CONDA_PYTHON_EXE': '/Users/evgenij/opt/anaconda3/bin/python', + 'LOGNAME': 'evgenij', '_': '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3', + '__CF_USER_TEXT_ENCODING': '0x1F5:0x7:0x31', + '__PYVENV_LAUNCHER__': '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3'}) + +Ваши данные будут отличаться от моих, так как конфигурация компьютера у всех немного отличается, однако вы определенно увидите большое количество совпадений. Как вы могли заметить, работа функции вернула словарь. Это значит, что вы можете получить доступ к значениям среды, пользуясь обычными словарными методами. Например обрвщаться к нему по ключу: -Переименовывает old в new, создавая промежуточные директории. +.. code-block:: python -.. code-block:: python + >>> print(os.environ["TMPDIR"]) + +.. code-block:: txt + + /var/folders/hv/p9v314d106z3tqjyxvn5hfm40000gn/T/ - os.truncate(path, length) +Вы также можете использовать функцию os.getenv для доступа к этой переменной: -Обрезает файл до длины length. +.. code-block:: python -Пример использования функции: -***************************** + >>> print(os.getenv("TMPDIR")) + +.. code-block:: txt + + /var/folders/hv/p9v314d106z3tqjyxvn5hfm40000gn/T/ -.. code-block:: python +Полезность использования ``os.getenv()`` вместо словаря ``os.environ`` заключается в том, что если вы находитесь в положении, когда вам нужно получить доступ к переменной среды, которая не существует, функция ``getenv`` попросту ничего не сделает. Если вы попытаетесь сделать то же самое, пользуясь ``os.environ``, вы получите уведомление об ошибке. Давайте попробуем на примере: - import os - path = 'truncate.txt' - with open(path, 'w') as f: - f.write('truncate data string') - os.truncate(path, 8) # обрезаем - with open(path, 'r') as f: - print(f.read()) # 'truncate' - os.unlink(path) # очистка файла +.. code-block:: python + >>> print(os.environ["TMP2"]) + +.. code-block:: txt + + Traceback (most recent call last): + File "", line 1, in + File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 678, in __getitem__ + raise KeyError(key) from None + KeyError: 'TMP2' + + +os.chdir( ) / os.getcwd( ) +========================================================= + +Функция ``os.chdir`` позволяет нам вносить изменения в каталоге, который мы в данный момент используем в сессии. Если вам нужно знать, какой путь вы в данный момент используете, для этой нужно вызвать ``os.getcwd()``. Попробуем воспользоваться обоими модулями: -.. code-block:: python +.. code-block:: python - os.utime(path, times=None, *, ns=None, dir_fd=None, follow_symlinks=True) + >>> os.getcwd() -Модификация времени последнего доступа и изменения файла. Либо times - кортеж (время доступа в секундах, время изменения в секундах), либо ns - кортеж (время доступа в наносекундах, время изменения в наносекундах). +.. code-block:: txt + + /Users/evgenij + +.. code-block:: python -Работа с директориями: -====================== + >>> os.chdir(r"C:\Users\mike\Documents") + + >>> print(os.getcwd()) + +.. code-block:: txt + + C:\\Users\\mike\\Documents + +Мы открыли директорию по умолчанию в Python, после запуска данного кода в IDLE. После этого мы изменили папки, при помощи ``os.chdir()``. Наконец, мы вызывали ``os.getcwd()`` еще раз, чтобы убедиться, что все изменения были выполнены правильно. -.. code-block:: python +Работа с папками и файлами +##################################### - os.walk(top, topdown=True, onerror=None, followlinks=False) +os.mkdir( ) / os.makedirs( ) +========================================================= -Генерация имён файлов в дереве каталогов, сверху вниз (если topdown равен True), либо снизу вверх (если False). Для каждого каталога функция walk возвращает кортеж (путь к каталогу, список каталогов (кроме символов '.', '..'), список файлов). +Как вы могли догадаться, эти два метода уже знакомы нам и используются для создания папок. Первая, ``os.mkdir()``, позволяет создать одну папку. Попробуем: -Обратите внимание, что имена в списках не содержат компонентов пути. Чтобы получить полный путь, который начинается с top, к файлу или каталогу в dirpath, выполните: +.. code-block:: python -.. code-block:: python + >>> path = r'C:\Users\evjenij\Documents' + >>> os.mkdir(path) - os.path.join(dirpath, name) +Первая строка кода создает папку под названием test в определенном каталоге. Вы можете использовать эти модули в предыдущем разделе, чтобы узнать, где именно вы запустили свой код, на случай, если вы забыли. Во втором примере мы назначили путь к переменной, затем к ``os.mkdir()``. Это позволяет вам создать папку в любой точке вашей системы, где есть доступ. Функция ``os.makedirs()`` создает промежуточные папки в пути, если их там нет. В целом, это значит, что вы создали путь, в котором размещены папки. Данное решение удобно, когда есть необходимость создания журнала, с датированной структурой, например Год\Месяц\День. Давайте взглянем на пример: -.. code-block:: python +.. code-block:: python - os.chdir(path) + >>> path = r'C:\Users\evjenij\Documents\pytest\2014\02\19' + >>> os.makedirs(path) + +Что произошло? Этот код просто создал кучу папок! Если в вашей системе все еще есть папка pytest, то в ней появится папка 2014, в которой также есть папка, в которой, удивительно, находится еще одна. Попробуйте сами, воспользовавшись рабочим путем в вашей системе. -Смена текущей директории. -.. code-block:: python +os.remove( ) / os.rmdir( ) +========================================================= - os.getcwd() +Функции ``os.remove()`` и ``os.rmdir()`` используются для удаления файлов и каталогов соответственно. Посмотрим на ``os.remove()``: -Возвращает строку, содержащую абсолютный путь текущей рабочей директории. +.. code-block:: python -.. code-block:: python + >>> os.remove("test.txt") + +Этот фрагмент кода пытается удалить файл под названием test.txt из вашего рабочего каталога. Если модуль не может найти файл, должно появиться уведомление о той или иной ошибке. Ошибка также возникнет, если файл уже используется (другими словами закрыт), или у вас нет разрешения для удаления данного файла. Возможно, вы хотите проверить ``os.unlink``, который выполняет ту же функцию. Термин unlink – привычное для Unix название данной процедуры. Взглянем на пример работы ``os.rmdir()``: - os.rmdir(path, *, dir_fd=None) +.. code-block:: python -Удаляет пустую директорию. + >>> os.rmdir("pytest") + +Данный код попытается удалить каталог под названием pytest из каталога, используемого в данный момент в работе. В случае, если это удалось, каталог pytest исчезнет. Ошибка может возникнуть, если каталога с таким названием не существует, если у вас нет разрешения на его удаление, или если каталог не пустой. ``os.removedirs()`` может удалить пустые вложенные каталоги. -.. code-block:: python - os.listdir(path=".") +os.rename(src, dst) +========================================================= -Возвращает писок файлов и директорий в папке. По умолчанию директория является текущей. +Функция os.rename( ) применяется тогда, когда нужно переименовать файл или папку. Посмотрим на примере: -.. code-block:: python +.. code-block:: python - os.mkdir(path, mode=0o777, *, dir_fd=None) + >>> os.rename("test.txt", "pytest.txt") + +В этом примере, мы указали ``os.rename`` на то, что нужно переименовать файл под названием test.txt на pytest.txt. Это произойдет в каталоге, с которым мы в данный момент работаем. Ошибка может возникнуть в том случае, если вы попытаетесь переименовать несуществующий файл, или если у вас нет доступа к данной операции. Также существует функция os.renames, которая меняет название папки или файла соответственно. -Создаёт директорию. OSError, если директория существует. -.. code-block:: python +os.startfile( ) +========================================================= - os.makedirs(path, mode=0o777, exist_ok=False) +Метод ``os.startfile( )`` позволяет нам «запустить» файл в привязанной к нему программе. Другими словами, мы можем открыть файл вместе с привязанной к нему программой, как когда вы открываете файл PDF двойным щелчком, и он открывается в программе Adobe Reader. Попробуем: -Создаёт директорию, создавая при этом промежуточные директории. +.. code-block:: python -.. code-block:: python + >>> os.startfile(r'C:\Users\evjenij\Documents\labels.pdf') + +В данном примере мы прошли полный путь к модулю ``os.startfile``, который указывает на открытие файла под названием labels.pdf. На моем компьютере данная функция открывает файл PDF в программе Adobe Reader. Попробуйте открыть файлы PDF, MP3 или фотографии на своем компьютере при помощи данного метода, чтобы увидеть как он работает. - os.removedirs(path) +os.walk( ) +========================================================= -Удаляет директорию, затем пытается удалить родительские директории, и удаляет их рекурсивно, пока они пусты. +Метод ``os.walk( )`` дает нам возможность для итерации на корневом уровне пути. Это значит, что мы можем назначить путь к этой функции и получить доступ ко всем её подкаталогам и файлам. Используем одну из папок Python, при помощи которой мы можем проверить данную функцию. Мы используем C:\Python3\Tools -Пример кода для работы с папками: -********************************* +.. code-block:: python -.. code-block:: python + >>> path = r'C:\Python3\Tools' - import os + >>> for root, dirs, files in os.walk(path): + print(root) + +Результат работы: - dir_name = 'os_directories' +.. code-block:: txt - print('creating', dir_name) - os.makedirs(dir_name) + C:\Python3\Tools + C:\Python3\Tools\i18n + C:\Python3\Tools\pynche + C:\Python3\Tools\pynche\X + C:\Python3\Tools\Scripts + C:\Python3\Tools\versioncheck + C:\Python3\Tools\webchecker + + +Функции для работы со ссылками +########################################## - file_name = os.path.join(dir_name, 'example.txt') - print('creating', file_name) - with open(file_name, 'wt') as f: - f.write('example file') +os.symlink( ) +========================================================= - print('cleaning up') - os.unlink(file_name) - os.rmdir(dir_name) +Создаёт символическую ссылку на объект. -Функции для работы со ссылками: +Синтаксис: .. code-block:: python - os.symlink(source, link_name, target_is_directory=False, *, dir_fd=None) + os.symlink(src, dst, target_is_directory = False, *, dir_fd = None) -Создаёт символическую ссылку на объект. +Параметры: + +**src**: объект, похожий на путь, представляющий путь к файловой системе. Это путь к исходному файлу, для которого будет создана символическая ссылка. + +**dst**: объект, похожий на путь, представляющий путь к файловой системе. Это путь к целевому файлу, в котором будет создана символическая ссылка. + +**target_is_directory (необязательно)**: значение этого параметра по умолчанию — False. Если указанный целевой путь является каталогом, его значение должно быть True. + +**dir_fd (необязательно)**: дескриптор файла, ссылающийся на каталог. + +**Возвращаемое значение**: этот метод не возвращает никакого значения. + +os.link( ) +========================================================= + +Метод ``os.link( )`` создает жесткую ссылку, указывающую на src с именем dst . Этот метод очень полезен для создания копии существующего файла + +Синтаксис: .. code-block:: python + + os.link(src, dst) - os.link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True) +Параметры: -Создаёт жёсткую ссылку. +**src**: это путь к исходному файлу, для которого будет создана жесткая ссылка. -В чем отличие жесткой ссылки от символической? +**dest**: это путь к целевому файлу, по которому будет создана жесткая ссылка. -СИМВОЛИЧЕСКИЕ ССЫЛКИ -******************** +**Возвращаемое значение**: этот метод не возвращает никакого значения. + +Отличия жесткой и символической ссылок +=========================================== + +**Сиволические** **ссылки** Главное ее отличие от жестких ссылок в том, что при удалении целевого файла ссылка останется, но она будет указывать в никуда, поскольку файла на самом деле больше нет. -Вот основные особенности символических ссылок: +Особенности: +~~~~~~~~~~~~~~~~~~~~~~~~ + +#. Могут ссылаться на файлы и каталоги. + +#. После удаления, перемещения или переименования файла становятся недействительными. + +#. Права доступа и номер inode отличаются от исходного файла. + +#. При изменении прав доступа для исходного файла, права на ссылку останутся неизменными. + +#. Можно ссылаться на другие разделы диска. -Могут ссылаться на файлы и каталоги; -После удаления, перемещения или переименования файла становятся недействительными; -Права доступа и номер inode отличаются от исходного файла; -При изменении прав доступа для исходного файла, права на ссылку останутся неизменными; -Можно ссылаться на другие разделы диска; -Содержат только имя файла, а не его содержимое. -Теперь давайте рассмотрим жесткие ссылки. +#. Содержат только имя файла, а не его содержимое. -ЖЕСТКИЕ ССЫЛКИ -************** +#. Теперь давайте рассмотрим жесткие ссылки. + +**Жесткие** **ссылки** Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жесткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок - это отдельный файл, но ведут они к одному участку жесткого диска. Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя. Особенности: -Работают только в пределах одной файловой системы; -Нельзя ссылаться на каталоги; -Имеют ту же информацию inode и набор разрешений что и у исходного файла; -Разрешения на ссылку изменяться при изменении разрешений файла; -Можно перемещать и переименовывать и даже удалять файл без вреда ссылке. +~~~~~~~~~~~~~~~~~~~~~~~~ + +#. Работают только в пределах одной файловой системы. + +#. Нельзя ссылаться на каталоги. + +#. Имеют ту же информацию inode и набор разрешений что и у исходного файла. +#. Разрешения на ссылку изменяться при изменении разрешений файла. -Функции и переменные для работы с ОС: -===================================== +#. Можно перемещать и переименовывать и даже удалять файл без вреда ссылке. -.. code-block:: python + - os.system(command) +Подмодуль os.path +####################### -Исполняет системную команду, возвращает код её завершения (0, если успешно). +Подмодуль ``os.path`` модуля os имеет широкий ряд встроенных преимуществ. Ознакомимся со следующими функциями: -.. code-block:: python +• basename - os.name +• dirname -Переменная имени операционной системы. Доступные значения: 'posix', 'nt', 'mac', 'os2', 'ce', 'java'. +• exists -.. code-block:: python +• isdir and isfile - os.environ +• join -Словарь переменных окружения. Является изменямым и дополняемым. +• split -.. code-block:: python - os.getlogin() +os.path.basename +========================================================= -Возвращает имя пользователя, вошедшего в терминал. +Функция ``basename`` вернет название файла пути. Пример: .. code-block:: python - os.uname() + >>> os.path.basename(r'C:\Python3\Tools\pynche\ChipViewer.py') + +.. code-block:: txt -Возвращает объект с полями: sysname - имя ОС, nodename - имя машины в сети (имя рабочей группы), release - номер релиза, version - версия, machine - идентификатор машины (разрядность). Доступен только в недавних разновидностях UNIX. + ChipViewer.py + +Это очень полезная функция, особенно в тех случаях, когда нужно использовать имя файла для наименования того или иного связанного с работой файла, например лог-файл. Такая ситуация возникает часто при работе с файлами данных. + +os.path.dirname +========================================================= + +Функция ``dirname`` возвращает только часть каталога пути. Это проще понять, если мы взглянем на пример кода: .. code-block:: python - os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True) + >>> print( os.path.dirname(r'C:\Python3\Tools\pynche\ChipViewer.py') ) + +.. code-block:: txt + + C:\\Python3\\Tools\\pynche + +В данном примере мы просто возвращаем путь к каталогу. Это также полезно, когда вам нужно сохранить другие файлы рядом с тем, который вы обрабатываете в данный момент. Как и в случае с лог-файлом, упомянутым выше. + +os.path.exists +========================================================= -Меняет id владельца и группы (Unix). +Функция ``exists`` говорит нам, существует ли файл, или нет. Все что вам нужно, это указать ему путь. Взглянем на пример: .. code-block:: python - os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True) - проверка доступа к объекту у текущего пользователя. - os.F_OK - объект существует, - os.R_OK - доступен на чтение, - os.W_OK - доступен на запись, - os.X_OK - доступен на исполнение. + >>> os.path.exists(r'C:\Python3\Tools\pynche\ChipViewer.py') + + True -Пример использования: + >>> os.path.exists(r'C:\Python3\Tools\pynche\fake.py') + + False + +В первом примере, мы указали функции exists настоящий путь, на что она указывает как True. Это говорит о том, что данный путь существует. Во втором примере, мы указали неправильный путь, от чего функция указывает нам на это сообщением False. + +os.path.isdir / os.path.isfile +========================================================= + +Методы ``isdir`` и ``isfile`` тесно связаны с методом ``exists``, так как они также тестируют присутствие или отсутствие файлов или папок на тех или иных путях. Однако, isdir проверяет только пути к папкам, а ``isfile``, соответственно, к файлам. Если вам нужно проверить путь, и не важно, папка это или файл, проще будет воспользоваться методом ``exists``. В любом случае, взглянем на пару примеров: .. code-block:: python - try: - fp = open("myfile") - except PermissionError: - return "Error" - else: - with fp: - return fp.read() + >>> os.path.isfile(r'C:\Python3\Tools\pynche\ChipViewer.py') + + True + + >>> os.path.isdir(r'C:\Python3\Tools\pynche\ChipViewer.py') + + False + + >>> os.path.isdir(r'C:\Python3\Tools\pynche') + + True + + >>> os.path.isfile(r'C:\Python3\Tools\pynche') + + False + +Уделите особое внимание данным примерам. В первом мы указали путь к файлу и проверили, является ли этот путь в действительности файлом. Затем, во втором примере, мы проделали то же самое, но в контексте папки. Вы можете лично ознакомиться с результатами. После этих двух примеров, мы немного изменили условия, указав путь к папке для обеих функций. Эти примеры наглядно демонстрируют то, как эти функции работают. + +os.path.join +========================================================= + +Метод ``join`` позволяет вам совместить несколько путей при помощи присвоенного разделителя. К примеру, в Windows, в роли разделителя выступает бэкслэш (косая черта, указывающая назад), однако в Linux функция разделителя присвоена косой черте, указывающей вперед (forward slash). Как это работает: .. code-block:: python - os.urandom(n) + >>> print( os.path.join(r'C:\Python3\Tools\pynche', 'ChipViewer.py') ) + +.. code-block:: txt + + C:\\Python3\\Tools\\pynche\\ChipViewer.py + +В данном примере мы совместили путь каталога и файла вместе, для получения рабочего пути. Обратите внимание на то, что метод ``join`` не указывает на то, какой результат в итоге вышел. + +os.path.split +========================================================= -Возвращает n случайных байт(!). Полезно, если хотите использовать это в криптографии. +Метод ``split`` разъединяет путь на кортеж, который содержит и файл и каталог. Взглянем на пример: .. code-block:: python - os.getpid() + >>> print( os.path.split(r'C:\Python3\Tools\pynche\ChipViewer.py') ) + +.. code-block:: txt + + 'C:\\Python3\\Tools\\pynche', 'ChipViewer.py' + +В данном примере показано, что происходит, когда мы указываем путь к файлу. Теперь взглянем на то, что происходит, если в конце пути нет названия файла: -Возвращает текущий id процесса. +.. code-block:: python + + >>> print( os.path.split(r'C:\Python3\Tools\pynche') ) + +.. code-block:: txt + + ‘C:\Python3\Tools’, ‘pynche’ + +Как видите, данная функция берет путь и разъединяет его таким образом, что подпапка стала вторым элементом кортежа с остальной частью пути в первом элементе. Напоследок, взглянем на бытовой случай использования ``split``: .. code-block:: python - os.sync() + >>> dirname, fname = os.path.split(r'C:\Python3\Tools\pynche\ChipViewer.py') + >>> print(dirname) + +.. code-block:: txt -Записывает все данные на диск. Доступен только на UNIX. + C:\\Python3\\Tools\\pynche .. code-block:: python - os.path - модуль, реализующий некоторые полезные функции на работы с путями. + >>> print(fname) + +.. code-block:: txt + + ChipViewer.py + +В данном примере указано, как сделать множественное назначение. Когда вы разъединяете путь, он становится кортежем, состоящим из двух частей. После того, как мы опробовали две переменные с левой части, первый элемент кортежа назначен к первой переменной, а второй элемент к второй переменной соответственно. + +----------------------------------------------------------------------------------------------------------------------------- Задачи на использование функций -******************************* +############################################### -Задача 1: -~~~~~~~~~ +Задача 1 +========================================================= -Напишите программу, которая выводит 'Hello, $USER!', где $USER - имя пользователя. Пользоваться print() запрещено. +Напишите программу, которая выводит ``'Hello, $USER!'``, где $USER - имя пользователя. Пользоваться ``print()`` запрещено. -Задача 2: -~~~~~~~~~ +Задача 2 +========================================================= Напишите программу, которая выводит дерево файлов по заданному пути. В ней должны быть: + а) фильтр по названиям + б) вывод типа файла: является ли файл символической ссылкой или является обычным файлом -Задача 3: -~~~~~~~~~ +Задача 3 +========================================================= +Напишите программу, которая создаст журнала (отдельную папку), с датированной структурой, например Год\Месяц\День, в которой будут 2021, 2022 года и летние месяцы каждого года. Создайте жесткую ссылку в папке 2022 года на август месяц 2021 года и символическую ссылку на июнь и июль 2021 года. Удалите папку с 2021 годом и опишите как будут вести себя ссылки. Что будет если не удалять папку, а перенести ее в другое место из основного журнал? Какие ссылки в этом случае бкдкт рабочими? + +Задача 4 +========================================================= Петя только начал изучать программирование и пока не научился пользоваться командой git clone, поэтому скачал несколько репозиториев с Github в .zip формате. Но вот незадача: файлы программ не являются исполняемыми. Есть несколько .zip архивов, в них содержатся файлы необходимых проектов на языке Python. Напишите программу, которая разархивирует проекты в отдельные папки с тем же названием проектов и сделает все Python файлы исполняемыми. -Задача 4: -~~~~~~~~~ +Задача 5 +========================================================= Напишите программу, которая проверяет, есть ли в переменных окружения заданный путь. Если переменная есть, вывести название переменной, если ее нет - создать с именем 'OS_PRACTICE