Что такое файловая система
Файловая система — это способ хранения и организации данных на диске компьютера. Она представляет собой структуру из файлов и папок (директорий), которые можно читать, изменять, удалять или перемещать.
/home/user/
├── PycharmProjects/
│ ├── project1/
│ │ ├── data/
│ │ │ └── file.txt
│ │ └── main.py
│ └── project2/
│ └── main.py
├── documents/
└── downloads/
Абсолютные и относительные пути
Абсолютный путь — полный путь от корневой директории до файла или папки. Он однозначно указывает местоположение объекта независимо от того, откуда запущена программа.
# Linux / macOS
absolute_path = "/home/user/documents/file.txt"
# Windows
absolute_path = "C:\\Users\\User\\Documents\\file.txt"
Относительный путь — путь от текущей рабочей директории. Он удобен, когда скрипт и данные лежат рядом, потому что такой код легко переносить между компьютерами.
# Текущая директория: /home/user/PycharmProjects/project1/data
./file.txt # /home/user/PycharmProjects/project1/data/file.txt
../file.txt # /home/user/PycharmProjects/project1/file.txt
| Знак | Значение | Пример |
|---|---|---|
. | Текущая директория | ./file.txt |
.. | Родительская директория | ../file.txt |
/ | Разделитель в Linux / macOS | /home/user/file.txt |
\\ | Разделитель в Windows | C:\\Users\\User\\file.txt |
~ | Домашняя директория (Linux / macOS) | ~/documents/file.txt |
Когда использовать:
- Абсолютный путь — когда путь фиксирован (конфиги, системные файлы) или нужно работать независимо от текущей директории.
- Относительный путь — для переносимых скриптов и проектов, где данные лежат рядом с кодом.
Модуль os. Навигация
Модуль os предоставляет инструменты для работы с операционной системой, включая файловую систему.
import os
# Текущая рабочая директория
print(os.getcwd())
# Переход в другую директорию
os.chdir("./subdirectory") # ошибка, если её нет
os.chdir("..") # на уровень выше
Работа с файлами и директориями
Чтобы проверить, существует ли объект, используйте os.path.exists:
import os
file_path = "example.txt"
if os.path.exists(file_path):
print(f"Файл '{file_path}' существует.")
else:
print(f"Файл '{file_path}' не найден.")
Список содержимого директории возвращает os.listdir:
contents = os.listdir(".")
print("Содержимое:", contents)
Создание директорий:
# Одна директория; ошибка, если уже существует
os.mkdir("example_folder")
# Вложенные директории; exist_ok=True подавляет ошибку
os.makedirs("parent_folder/child_folder", exist_ok=True)
Создание пустого файла делается через встроенную функцию open:
open("example.txt", "w").close()
Определение типа объекта:
path = "example.txt"
if os.path.isfile(path):
print(f"'{path}' — файл.")
elif os.path.isdir(path):
print(f"'{path}' — директория.")
else:
print(f"'{path}' не существует.")
Переименование и удаление:
# Переименование файла или папки
os.rename("old_name.txt", "new_name.txt")
# Удаление файла
os.remove("new_name.txt")
# Удаление пустой директории
os.rmdir("empty_folder")
Работа с путями
| Функция | Назначение |
|---|---|
os.path.split(path) | Разделяет путь на директорию и имя файла |
os.path.basename(path) | Возвращает имя файла или папки |
os.path.dirname(path) | Возвращает директорию без имени файла |
os.path.abspath(path) | Превращает относительный путь в абсолютный |
os.path.join(*parts) | Соединяет части пути с правильным разделителем |
import os
path = "/home/user/docs/file.txt"
print(os.path.dirname(path)) # /home/user/docs
print(os.path.basename(path)) # file.txt
print(os.path.split(path)) # ('/home/user/docs', 'file.txt')
relative = "example.txt"
print(os.path.abspath(relative))
full = os.path.join(os.getcwd(), "docs", "data.txt")
print(full)
Рекурсивный обход директорий
os.walk возвращает корневую директорию, список поддиректорий и список файлов для каждого уровня вложенности:
import os
for root, dirs, files in os.walk("."):
print(f"Текущая директория: {root}")
print(f"Поддиректории: {dirs}")
print(f"Файлы: {files}")
print("-" * 40)
Модуль sys. Аргументы командной строки
Модуль sys даёт доступ к параметрам интерпретатора. Через sys.argv можно получить аргументы, переданные при запуске скрипта:
import sys
print("Все аргументы:", sys.argv)
if len(sys.argv) > 1:
print(f"Первый аргумент: {sys.argv[1]}")
else:
print("Аргументы не переданы.")
Первый элемент sys.argv[0] — это имя запущенного скрипта. Если нужно ровно два аргумента, проверяйте длину и завершайте программу при ошибке:
import sys
if len(sys.argv) != 2:
print("Использование: python script.py <директория>")
sys.exit(1)
directory = sys.argv[1]
pathlib вместо os.path. pathlib.Path предоставляет объектно-ориентированный интерфейс, поддерживает перегрузку оператора / для построения путей и одинаково работает на Windows, Linux и macOS.
Краткий итог
Модуль os позволяет получать текущую директорию, проверять и создавать папки, разбирать пути и рекурсивно обходить дерево файлов. Модуль sys помогает делать скрипты гибкими за счёт аргументов командной строки. Запомните главное: для сборки путей используйте os.path.join, а в новых проектах — pathlib.Path.