Модуль os в Python: возможности управления файловой системой

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Новички в программировании и Python-разработчики, желающие освоить модуль os
  • Опытные разработчики и DevOps-инженеры, заинтересованные в автоматизации задач
  • Студенты и участники курсов по программированию, ищущие практические примеры применения Python

    В мире Python-разработки есть инструменты, которые кардинально меняют правила игры, и модуль os – определенно один из них. Представьте: вы можете управлять файлами, папками и даже взаимодействовать с операционной системой несколькими строками кода, не покидая уютной среды Python. Будь вы новичок, пытающийся автоматизировать рутинные задачи, или опытный DevOps-инженер, модуль os открывает целый мир возможностей для манипуляции с файловой системой и выполнения системных операций с изящной простотой. 🐍 Давайте погрузимся в эту мощную библиотеку, раскроем ее возможности и научимся решать реальные задачи с помощью практических примеров.

Хотите освоить Python на профессиональном уровне и научиться эффективно использовать такие инструменты как модуль os? Обучение Python-разработке от Skypro — это именно то, что вам нужно. Наши студенты не просто изучают синтаксис, а сразу применяют знания в реальных проектах, работая с файловыми системами, автоматизируя процессы и создавая практичные скрипты. Станьте разработчиком, который решает любые задачи системного уровня!

Что такое модуль os в Python и для чего он нужен

Модуль os в Python – это встроенная библиотека, предназначенная для взаимодействия с операционной системой. Его главная ценность заключается в обеспечении переносимости кода между различными платформами. Другими словами, вы пишете код один раз, а запускать его можно на Windows, macOS или Linux, не беспокоясь о различиях в путях к файлам или системных командах.

В основе модуля лежит набор низкоуровневых функций, которые взаимодействуют с системными вызовами операционной системы. Это своеобразный "переводчик" между Python и ОС, который позволяет:

  • Управлять файлами и директориями (создавать, удалять, переименовывать)
  • Получать информацию о файлах и папках (размер, права доступа, время модификации)
  • Работать с переменными окружения
  • Выполнять системные команды и запускать дочерние процессы
  • Управлять путями к файлам в кроссплатформенном формате

Импортирование модуля os выполняется простой командой:

Python
Скопировать код
import os

После импортирования вы получаете доступ к десяткам полезных функций, которые значительно упрощают работу с системными ресурсами. Для наглядности рассмотрим основные категории функций модуля os:

Категория Описание Примеры функций
Файловые операции Функции для работы с файлами os.remove(), os.rename(), os.chmod()
Директории Управление папками и навигация os.mkdir(), os.listdir(), os.getcwd()
Пути Манипуляции с путями к файлам os.path.join(), os.path.exists(), os.path.split()
Процессы Управление системными процессами os.system(), os.popen(), os.execv()
Окружение Работа с переменными окружения os.environ, os.getenv(), os.putenv()

Алексей Петров, системный администратор

Помню, как в начале карьеры мне поручили автоматизировать ежедневное резервное копирование файлов на сервере. Раньше это делалось вручную и занимало около часа времени каждый день. Не имея опыта в программировании, я нашел информацию о модуле os в Python и был удивлен, насколько легко удалось решить эту задачу.

Написал скрипт, который автоматически создавал новую директорию с датой, копировал туда важные файлы и удалял архивы старше 30 дней. Всего 20 строк кода с использованием os.path.join(), os.makedirs() и os.walk(). Скрипт запускался через планировщик задач, и проблема была решена. Коллеги были в восторге, а я влюбился в Python и модуль os в частности.

Важно понимать, что модуль os предоставляет базовую функциональность, которую часто дополняют другими модулями для более специализированных задач. Например, для более удобной работы с путями к файлам рекомендуется использовать модуль pathlib (доступен в Python 3.4+), а для копирования файлов и директорий — shutil.

Но давайте не будем сразу усложнять и рассмотрим основные функции модуля os на практических примерах. 🔍

Пошаговый план для смены профессии

Основные функции модуля os Python для работы с файлами

Модуль os предоставляет широкий спектр функций для работы с файлами, позволяя выполнять все основные операции – от проверки существования файла до изменения прав доступа. Рассмотрим наиболее востребованные из них с практическими примерами.

Проверка существования файла

Прежде чем выполнять какие-либо операции с файлом, часто требуется убедиться, что он существует:

Python
Скопировать код
import os

file_path = "data.txt"
if os.path.exists(file_path):
print(f"Файл {file_path} существует")
else:
print(f"Файл {file_path} не найден")

Создание и удаление файлов

Для создания пустого файла можно использовать функцию open() в сочетании с режимом 'w', а для удаления – os.remove():

Python
Скопировать код
# Создание файла
with open("new_file.txt", "w") as f:
f.write("Привет, мир!")

# Удаление файла
if os.path.exists("old_file.txt"):
os.remove("old_file.txt")
print("Файл удален")
else:
print("Файл не существует")

Переименование файлов

Функция os.rename() позволяет переименовывать файлы или перемещать их в другую директорию:

Python
Скопировать код
# Переименование файла
os.rename("old_name.txt", "new_name.txt")

# Перемещение файла в другую директорию
os.rename("file.txt", "backup/file.txt") # Директория backup должна существовать

Получение информации о файле

Модуль os позволяет получить различную метаинформацию о файлах:

Python
Скопировать код
# Получение размера файла в байтах
file_size = os.path.getsize("document.txt")
print(f"Размер файла: {file_size} байт")

# Получение времени последней модификации
mod_time = os.path.getmtime("document.txt")
import time
print(f"Последнее изменение: {time.ctime(mod_time)}")

# Получение абсолютного пути к файлу
abs_path = os.path.abspath("document.txt")
print(f"Абсолютный путь: {abs_path}")

Изменение прав доступа

На системах UNIX/Linux можно изменять права доступа к файлам с помощью os.chmod():

Python
Скопировать код
# Устанавливаем права доступа 0o755 (rwxr-xr-x)
os.chmod("script.py", 0o755)

Работа с путями к файлам

Модуль os.path предоставляет функции для манипуляции с путями к файлам в кроссплатформенном стиле:

Python
Скопировать код
# Соединение компонентов пути
full_path = os.path.join("folder", "subfolder", "file.txt")
print(full_path) # folder/subfolder/file.txt или folder\subfolder\file.txt в зависимости от ОС

# Разделение пути на директорию и имя файла
directory, filename = os.path.split("/path/to/file.txt")
print(f"Директория: {directory}, Файл: {filename}")

# Получение расширения файла
base, ext = os.path.splitext("document.txt")
print(f"Имя без расширения: {base}, Расширение: {ext}")

Сравнение основных файловых операций в разных операционных системах:

Операция Windows Linux/macOS
Разделитель путей \ /
Создание файла os.open() или open() os.open() или open()
Удаление файла os.remove() os.remove() или os.unlink()
Права доступа Ограниченная поддержка Полная поддержка через os.chmod()
Символические ссылки Требуются права администратора os.symlink() без ограничений

При работе с файлами через модуль os важно помнить о корректной обработке исключений, так как многие операции могут завершиться ошибкой по независящим от вас причинам (отсутствие прав доступа, файл занят другим процессом и т.д.):

Python
Скопировать код
try:
os.remove("important_file.txt")
print("Файл успешно удален")
except PermissionError:
print("Ошибка: недостаточно прав для удаления файла")
except FileNotFoundError:
print("Ошибка: файл не найден")
except Exception as e:
print(f"Произошла неизвестная ошибка: {e}")

Теперь, когда мы разобрали работу с отдельными файлами, давайте перейдем к более сложным операциям – управлению директориями. 📁

Управление директориями через модуль os в Python

Работа с директориями (папками) — неотъемлемая часть автоматизации файловых операций. Модуль os предоставляет ряд мощных функций, которые позволяют манипулировать директориями так же просто, как и файлами. Рассмотрим основные операции и их практическое применение.

Определение текущей рабочей директории

Начнем с базовой функции os.getcwd() (get current working directory), которая возвращает абсолютный путь к текущей рабочей директории:

Python
Скопировать код
import os

current_dir = os.getcwd()
print(f"Текущая директория: {current_dir}")

Это особенно полезно, когда ваш скрипт работает с относительными путями, и вам нужно знать, от какой директории эти пути отсчитываются.

Изменение рабочей директории

С помощью os.chdir() вы можете изменить текущую рабочую директорию:

Python
Скопировать код
# Переход в другую директорию
os.chdir("/path/to/directory")
print(f"Новая текущая директория: {os.getcwd()}")

Это удобно, когда необходимо выполнить несколько операций с файлами в определенной директории.

Создание директорий

Python предлагает две основные функции для создания директорий:

Python
Скопировать код
# Создание одиночной директории
os.mkdir("new_folder")

# Создание вложенных директорий (рекурсивно)
os.makedirs("parent/child/grandchild", exist_ok=True)

Параметр exist_ok=True в os.makedirs() предотвращает возникновение ошибки, если директория уже существует. Это особенно удобно при написании скриптов, которые могут запускаться многократно.

Удаление директорий

Аналогично созданию, для удаления директорий существуют две функции:

Python
Скопировать код
# Удаление пустой директории
os.rmdir("empty_folder")

# Удаление директории с содержимым (требуется модуль shutil)
import shutil
shutil.rmtree("folder_with_files")

Будьте осторожны с shutil.rmtree() — эта функция удаляет директорию со всем содержимым без возможности восстановления!

Перечисление содержимого директории

Для получения списка файлов и поддиректорий используйте os.listdir():

Python
Скопировать код
# Получаем список всех файлов и папок
entries = os.listdir(".")
for entry in entries:
# Определяем, файл это или директория
if os.path.isfile(os.path.join(".", entry)):
print(f"Файл: {entry}")
elif os.path.isdir(os.path.join(".", entry)):
print(f"Директория: {entry}")

Более современной альтернативой является функция os.scandir(), доступная с Python 3.5:

Python
Скопировать код
with os.scandir(".") as entries:
for entry in entries:
if entry.is_file():
print(f"Файл: {entry.name}")
elif entry.is_dir():
print(f"Директория: {entry.name}")

Рекурсивный обход директорий

Когда необходимо обработать файлы во всех поддиректориях, удобно использовать os.walk():

Python
Скопировать код
# Рекурсивный обход директории
for root, dirs, files in os.walk("project_folder"):
print(f"Текущая директория: {root}")
print(f"Поддиректории: {dirs}")
print(f"Файлы: {files}")
print("-" * 30)

Эта функция возвращает кортеж из трех значений для каждой директории: путь к текущей директории, список поддиректорий и список файлов.

Проверка существования и типа объектов файловой системы

Модуль os предоставляет несколько функций для проверки существования и типа объектов:

Python
Скопировать код
path = "some_path"

# Проверка существования
if os.path.exists(path):
print(f"{path} существует")

# Проверка типа
if os.path.isfile(path):
print(f"{path} — это файл")
elif os.path.isdir(path):
print(f"{path} — это директория")
elif os.path.islink(path):
print(f"{path} — это символическая ссылка")

Сравнение операций с директориями в разных модулях Python:

Операция os модуль pathlib модуль shutil модуль
Получение текущей директории os.getcwd() Path.cwd()
Создание директории os.mkdir() / os.makedirs() Path.mkdir()
Удаление пустой директории os.rmdir() Path.rmdir()
Удаление директории с содержимым shutil.rmtree()
Список содержимого os.listdir() / os.scandir() Path.iterdir()
Рекурсивный обход os.walk() Path.glob("*/")

Мария Соколова, DevOps-инженер

В нашей компании возникла проблема с мониторингом логов. Они хранились на десятках серверов, в разных директориях, и имели разные форматы. Ежедневно приходилось вручную проверять сотни файлов, что отнимало уйму времени.

Я написала Python-скрипт с использованием os.walk() для рекурсивного обхода всех директорий с логами. Скрипт анализировал содержимое, искал ошибки по ключевым словам и формировал ежедневный отчет. В особо критичных случаях отправлял уведомления в командный чат.

Самой сложной частью было правильно организовать обход директорий, сохраняя контекст вложенности. Модуль os оказался незаменим — всего 50 строк кода, и мы получили решение, которое экономило команде несколько часов ежедневно и повысило скорость реакции на проблемы с 2-3 часов до 5-10 минут.

При работе с большим количеством директорий важно помнить о производительности. Например, вместо многократных вызовов os.path.isfile() и os.path.isdir() эффективнее использовать os.scandir(), который получает эту информацию во время перечисления содержимого.

Теперь, когда мы освоили работу с файлами и директориями, давайте перейдем к более высокоуровневым операциям и взаимодействию с операционной системой. 🖥️

Взаимодействие с операционной системой через os в Python

Помимо работы с файлами и директориями, модуль os предоставляет широкие возможности для взаимодействия с операционной системой. Это позволяет Python-скриптам выполнять системные команды, управлять процессами, работать с переменными окружения и многое другое. Рассмотрим основные методы такого взаимодействия.

Выполнение системных команд

Самым простым способом выполнения системных команд является функция os.system():

Python
Скопировать код
import os

# Выполнение команды и получение кода возврата
return_code = os.system("ls -la")
print(f"Команда выполнена с кодом: {return_code}")

Однако у этого метода есть ограничения: он не позволяет напрямую получить вывод команды. Для более гибкой работы с выводом используйте subprocess:

Python
Скопировать код
import subprocess

# Выполнение команды и получение вывода
result = subprocess.run(["ls", "-la"], capture_output=True, text=True)
print(f"Вывод команды:\n{result.stdout}")

# В случае ошибки
if result.returncode != 0:
print(f"Ошибка: {result.stderr}")

Работа с переменными окружения

Переменные окружения — ключевой механизм конфигурирования многих программ. Модуль os предоставляет доступ к ним через словарь os.environ:

Python
Скопировать код
# Получение значения переменной окружения
home_dir = os.environ.get('HOME')
print(f"Домашняя директория: {home_dir}")

# Установка новой переменной окружения
os.environ['MY_VARIABLE'] = 'my_value'

# Проверка наличия переменной
if 'PATH' in os.environ:
print("Переменная PATH существует")

Важно понимать, что изменения, внесенные в os.environ, действуют только в рамках текущего процесса Python и его дочерних процессов.

Управление процессами

Модуль os позволяет получать информацию о процессах и управлять ими:

Python
Скопировать код
# Получение ID текущего процесса
pid = os.getpid()
print(f"ID текущего процесса: {pid}")

# Получение ID родительского процесса
ppid = os.getppid()
print(f"ID родительского процесса: {ppid}")

# Завершение процесса (например, самого себя)
import signal
os.kill(pid, signal.SIGTERM) # На Windows работает ограниченно

Для более сложного управления процессами лучше использовать специализированные модули, такие как multiprocessing или psutil.

Получение информации о системе

С помощью модуля os можно получить различную системную информацию:

Python
Скопировать код
# Получение имени операционной системы
print(f"Имя ОС: {os.name}") # 'posix' для Linux/macOS, 'nt' для Windows

# Получение количества CPU
cpu_count = os.cpu_count()
print(f"Количество процессоров: {cpu_count}")

# Получение размера терминала (строки/колонки)
try:
terminal_size = os.get_terminal_size()
print(f"Размер терминала: {terminal_size.columns}x{terminal_size.lines}")
except OSError:
print("Не удалось определить размер терминала")

Работа с файловыми дескрипторами

Для низкоуровневых операций ввода-вывода модуль os предоставляет функции для работы с файловыми дескрипторами:

Python
Скопировать код
# Открытие файла на низком уровне
fd = os.open("file.txt", os.O_RDWR | os.O_CREAT)

# Запись в файл
os.write(fd, b"Hello, World!")

# Перемещение указателя в начало файла
os.lseek(fd, 0, os.SEEK_SET)

# Чтение из файла
data = os.read(fd, 100)
print(f"Прочитано: {data.decode()}")

# Закрытие файла
os.close(fd)

Однако для большинства задач удобнее использовать высокоуровневые функции, такие как open().

Сравнение методов выполнения системных команд

Метод Преимущества Недостатки Пример использования
os.system() Простота использования Нет прямого доступа к выводу, проблемы безопасности Быстрое выполнение простых команд
os.popen() Доступ к выводу команды Устаревший метод, ограниченный контроль Чтение вывода простых команд
subprocess.run() Полный контроль, безопасность, доступ к stdout/stderr Более сложный синтаксис Продвинутое управление командами
subprocess.Popen() Асинхронное выполнение, полный контроль Наиболее сложный интерфейс Параллельное выполнение команд

При взаимодействии с операционной системой важно учитывать различия между платформами. Например, команды shell на Windows и Linux различаются, а некоторые функции модуля os могут быть доступны только на определенных ОС.

Python
Скопировать код
# Кроссплатформенный пример
if os.name == 'nt': # Windows
os.system('dir')
else: # Linux/macOS
os.system('ls -la')

Таким образом, модуль os предоставляет мощные инструменты для взаимодействия с операционной системой, от выполнения команд до управления процессами. Однако для более специализированных задач стоит рассмотреть дополнительные модули, такие как subprocess для выполнения команд, psutil для мониторинга системы или platform для получения детальной информации о платформе. 🛠️

Практические задачи и решения с использованием модуля os

Теория без практики — всего лишь набор абстрактных знаний. Давайте рассмотрим несколько реальных задач, с которыми вы можете столкнуться в своей работе, и решим их с помощью модуля os. 👨‍💻

Задача 1: Организация файлов по типу

Представьте, что у вас есть директория с сотнями файлов разных типов (изображения, документы, архивы). Нужно автоматически рассортировать их по соответствующим папкам.

Python
Скопировать код
import os
import shutil

def organize_files(directory):
# Словарь расширений и соответствующих папок
extensions = {
'images': ['.jpg', '.jpeg', '.png', '.gif', '.bmp'],
'documents': ['.doc', '.docx', '.pdf', '.txt', '.xlsx', '.ppt'],
'archives': ['.zip', '.rar', '.tar', '.gz'],
'audio': ['.mp3', '.wav', '.flac', '.aac'],
'video': ['.mp4', '.avi', '.mkv', '.mov']
}

# Создаем папки, если они не существуют
for folder in extensions.keys():
folder_path = os.path.join(directory, folder)
if not os.path.exists(folder_path):
os.makedirs(folder_path)

# Обходим все файлы в директории
for filename in os.listdir(directory):
file_path = os.path.join(directory, filename)

# Пропускаем директории
if os.path.isdir(file_path):
continue

# Получаем расширение файла
_, extension = os.path.splitext(filename)
extension = extension.lower()

# Определяем целевую папку
target_folder = 'misc' # По умолчанию
for folder, exts in extensions.items():
if extension in exts:
target_folder = folder
break

# Создаем папку 'misc', если нужно
misc_path = os.path.join(directory, 'misc')
if target_folder == 'misc' and not os.path.exists(misc_path):
os.makedirs(misc_path)

# Перемещаем файл
target_path = os.path.join(directory, target_folder, filename)
if os.path.exists(file_path) and file_path != target_path:
shutil.move(file_path, target_path)
print(f"Переместили {filename} в {target_folder}")

# Использование
organize_files("/path/to/messy/directory")

Задача 2: Резервное копирование важных файлов

Автоматическое создание резервных копий определенных файлов с временной меткой:

Python
Скопировать код
import os
import shutil
import datetime

def backup_files(source_dir, backup_dir, extensions=['.txt', '.docx', '.xlsx']):
# Создаем имя директории с текущей датой
today = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
backup_path = os.path.join(backup_dir, f"backup_{today}")

# Создаем директорию для резервной копии
if not os.path.exists(backup_path):
os.makedirs(backup_path)

# Счетчик скопированных файлов
copied_files = 0

# Обходим все файлы и поддиректории
for root, _, files in os.walk(source_dir):
for file in files:
# Проверяем расширение
if any(file.endswith(ext) for ext in extensions):
source_file = os.path.join(root, file)

# Создаем относительный путь для сохранения структуры
rel_path = os.path.relpath(root, source_dir)
target_dir = os.path.join(backup_path, rel_path)

# Создаем директории, если они не существуют
if not os.path.exists(target_dir):
os.makedirs(target_dir)

# Копируем файл
target_file = os.path.join(target_dir, file)
shutil.copy2(source_file, target_file)
copied_files += 1
print(f"Скопирован: {source_file}")

print(f"Резервное копирование завершено. Скопировано файлов: {copied_files}")
return backup_path

# Использование
source = "/path/to/documents"
backup = "/path/to/backups"
backup_files(source, backup)

Задача 3: Мониторинг свободного места на диске

Скрипт для мониторинга свободного пространства и отправки предупреждений, если оно падает ниже порогового значения:

Python
Скопировать код
import os
import smtplib
from email.message import EmailMessage

def check_disk_space(path, threshold_gb=10, email_to=None):
# Получаем статистику по диску
stat = os.statvfs(path)

# Вычисляем свободное место в байтах
free_bytes = stat.f_frsize * stat.f_bavail
free_gb = free_bytes / (1024 ** 3) # Конвертируем в гигабайты

print(f"Свободное место на {path}: {free_gb:.2f} ГБ")

# Проверяем порог
if free_gb < threshold_gb and email_to:
# Формируем сообщение
msg = EmailMessage()
msg.set_content(f"Внимание! На диске {path} осталось всего {free_gb:.2f} ГБ свободного места!")
msg['Subject'] = "Предупреждение о нехватке места на диске"
msg['From'] = "monitor@example.com"
msg['To'] = email_to

# Отправляем email (требуется настройка SMTP)
try:
smtp_server = smtplib.SMTP('localhost')
smtp_server.send_message(msg)
smtp_server.quit()
print(f"Предупреждение отправлено на {email_to}")
except Exception as e:
print(f"Ошибка при отправке email: {e}")

return free_gb

# Использование
check_disk_space("/", threshold_gb=5, email_to="admin@example.com")

Задача 4: Поиск дубликатов файлов

Поиск и вывод списка дубликатов файлов для экономии места на диске:

Python
Скопировать код
import os
import hashlib

def find_duplicates(directory):
# Словарь для хранения хешей файлов
hashes = {}
# Словарь для хранения дубликатов
duplicates = {}

# Рекурсивный обход директории
for root, _, files in os.walk(directory):
for filename in files:
file_path = os.path.join(root, filename)

# Получаем размер файла
file_size = os.path.getsize(file_path)

# Пропускаем пустые файлы
if file_size == 0:
continue

# Вычисляем хеш файла (MD5)
file_hash = get_file_hash(file_path)

# Если хеш уже есть, это дубликат
if file_hash in hashes:
# Добавляем в список дубликатов
if file_hash not in duplicates:
duplicates[file_hash] = [hashes[file_hash]]
duplicates[file_hash].append(file_path)
else:
hashes[file_hash] = file_path

# Вывод результатов
total_duplicates = 0
total_wasted_space = 0

for file_hash, file_paths in duplicates.items():
file_size = os.path.getsize(file_paths[0])
wasted_space = file_size * (len(file_paths) – 1)
total_duplicates += len(file_paths) – 1
total_wasted_space += wasted_space

print(f"Найдены дубликаты (размер: {format_size(file_size)}):")
for path in file_paths:
print(f" – {path}")
print()

print(f"Всего найдено дубликатов: {total_duplicates}")
print(f"Потенциально можно освободить: {format_size(total_wasted_space)}")

return duplicates

def get_file_hash(file_path, block_size=65536):
"""Вычисляет MD5-хеш файла."""
md5 = hashlib.md5()
with open(file_path, 'rb') as f:
for block in iter(lambda: f.read(block_size), b''):
md5.update(block)
return md5.hexdigest()

def format_size(size_bytes):
"""Форматирует размер в байтах в человекочитаемый вид."""
for unit in ['Б', 'КБ', 'МБ', 'ГБ', 'ТБ']:
if size_bytes < 1024 or unit == 'ТБ':
return f"{size_bytes:.2f} {unit}"
size_bytes /= 1024

# Использование
find_duplicates("/path/to/check")

Задача 5: Автоматизация развертывания проекта

Скрипт для подготовки структуры директорий нового проекта:

Python
Скопировать код
import os
import sys

def create_project_structure(project_name, base_dir="."):
# Создаем корневую директорию проекта
project_dir = os.path.join(base_dir, project_name)

# Проверяем, существует ли директория
if os.path.exists(project_dir):
print(f"Ошибка: директория {project_dir} уже существует!")
return False

# Структура проекта
structure = {
'src': {
'main': {'__init__.py': ''},
'utils': {'__init__.py': ''},
'__init__.py': ''
},
'tests': {
'__init__.py': '',
'test_main.py': 'import unittest\n\nclass TestMain(unittest.TestCase):\n pass'
},
'docs': {},
'README.md': f'# {project_name}\n\nProject description goes here.',
'requirements.txt': '',
'setup.py': f'from setuptools import setup, find_packages\n\nsetup(\n name="{project_name}",\n version="0.1.0",\n packages=find_packages(),\n)'
}

# Создаем директории и файлы
try:
print(f"Создаем структуру проекта в {project_dir}...")
create_structure(project_dir, structure)
print("Структура проекта успешно создана!")
return True
except Exception as e:
print(f"Ошибка при создании структуры проекта: {e}")
return False

def create_structure(base_path, structure):
"""Рекурсивно создает структуру директорий и файлов."""
os.makedirs(base_path, exist_ok=True)

for name, content in structure.items():
path = os.path.join(base_path, name)

if isinstance(content, dict):
# Если это директория
create_structure(path, content)
else:
# Если это файл
with open(path, 'w') as f:
f.write(content)
print(f"Создан файл: {path}")

# Использование
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Использование: python script.py <project_name> [base_directory]")
sys.exit(1)

project_name = sys.argv[1]
base_dir = sys.argv[2] if len(sys.argv) > 2 else "."

if create_project_structure(project_name, base_dir):
print(f"Проект {project_name} готов к работе!")
else:
print("Не удалось создать структуру проекта.")

Приведенные примеры демонстрируют, как с помощью модуля os и сопутствующих модулей можно решать широкий спектр практических задач — от организации файлов до автоматизации процессов разработки. Они служат отправной точкой для создания ваших собственных скриптов автоматизации, которые могут сэкономить значительное количество времени и усилий. 🚀

Модуль os в Python — это не просто набор функций, а мощный инструмент, открывающий доступ к возможностям операционной системы. Освоив его, вы сможете автоматизировать практически любые рутинные задачи, связанные с файловой системой и системными процессами. Помните, что настоящая мощь Python раскрывается именно в способности элегантно решать реальные проблемы — от организации файлов до мониторинга системы и развертывания проектов. Начните с малого, автоматизируя повседневные задачи, и постепенно вы создадите арсенал инструментов, которые значительно повысят вашу продуктивность как разработчика.

Загрузка...