6.1 Работа с файлами
Python предоставляет множество встроенных функций и модулей для работы с файлами и каталогами. Основные операции выполняются с использованием встроенных модулей os, shutil и других.
Три основные операции с файлами:
- Копирование
- Перемещение
- Удаление
Для их выполнения идеально подходит модуль shutil.
Копирование файла
import shutil
shutil.copy('source.txt', 'destination.txt')
Перемещение файла
import shutil
shutil.move('source.txt', 'destination.txt')
Удаление файла
import os
os.remove('example.txt')
Проще, чем когда-либо.
6.2 Проверка существования файла
Очень часто бывает нужно проверить, существует ли определённый файл или нет. Для этого у модуля os есть специальный метод — exists().
Проверка существования файла
import os
if os.path.exists('example.txt'):
print("File exists")
else:
print("File does not exist")
# Если файл не существует, программа выполнит действия, описанные в блоке else.
# Например, можно вывести предупреждение, создать новый файл или выйти из программы.
Если файл не существует, программа может обработать это с помощью условий или выбросить исключение.
6.3 Проверка типа объекта: файл или директория
Очень часто бывает нужно проверить, является ли объект файлом или директорией. Например, если вы считываете все содержимое директории и файлы должны обработать по одному, а директории — по-другому.
Для таких случаев есть два специальных метода — isdir(), который проверяет, является ли объект директорией, и isfile(), который проверяет, является ли объект файлом.
Проверка — это директория или нет
if os.path.isdir('example_directory'):
print("Это директория")
else:
print("Это не директория")
Проверка — это файл или нет
if os.path.isfile('example_file'):
print("Это файл")
else:
print("Это не файл")
Это очень полезные функции, которые вы будете использовать чаще, чем думаете. :)
6.4 Работа с путями
У модуля os есть дочерний модуль os.path, который содержит полезные функции для работы с файлами и каталогами. Вот некоторые из них:
Получение расширения файла
Функция splitext() делит имя файла на две части и возвращает список из двух элементов: имени и расширения.
import os.path
# Получение расширения файла
file_path = 'example.txt'
file_extension = os.path.splitext(file_path)[1]
print(f"Расширение файла: {file_extension}")
Получение имени файла без расширения
import os.path
# Получение имени файла без расширения
file_path = 'example.txt'
file_name = os.path.splitext(os.path.basename(file_path))[0]
print(f"Имя файла без расширения: {file_name}")
Получение имени файла из пути
Функция basename() возвращает только имя файла, отрезая весь путь к нему.
import os.path
# Получение имени файла из пути
file_path = '/path/to/example.txt'
file_name = os.path.basename(file_path)
print(f"Имя файла: {file_name}")
Получение директории из пути
Также легко получить только директорию из имени файла с помощью функции dirname().
import os.path
# Получение директории из пути
file_path = '/path/to/example.txt'
directory = os.path.dirname(file_path)
print(f"Директория: {directory}")
Объединение путей
Если у вас есть отдельно директория и отдельно имя файла, то вы можете получить полный путь к этому файлу.
import os.path
# Объединение путей
directory = '/path/to'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"Полный путь: {full_path}")
6.5 Платформенно-независимые пути
При работе с путями важно учитывать различия между операционными системами. Разделители путей могут отличаться, и код, который работает на одной платформе, может не работать на другой. Для того чтобы избежать проблем при переносе кода между разными операционными системами, используйте функции os.path.join(), os.path.abspath() и os.path.dirname(), которые обеспечивают совместимость с разными платформами.
Например:
import os
# Объединение путей платформенно-независимым способом
directory = 'some_directory'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"Полный путь: {full_path}")
Получение абсолютного пути
Если у вас есть путь только относительно текущего рабочего каталога, но вы хотите преобразовать его в абсолютный, для этого есть функция abspath().
import os.path
# Получение абсолютного пути
relative_path = 'example.txt'
absolute_path = os.path.abspath(relative_path)
print(f"Абсолютный путь: {absolute_path}")
Важно! Всегда пользуйтесь системными функциями при работе с путями, так как ваш код может быть запущен на другой операционной системе, где разделитель файлов не \, а /, или где запрещены «:» в путях или еще что-то.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ