Введение
Этот практикум предназначен для того, чтобы помочь вам понять, как манипулировать файлами и папками с использованием Python. Мы будем использовать модули os и glob, которые предоставляют способ взаимодействия с файловой системой и выполнять общие операции, такие как создание, удаление и перемещение файлов и директорий.
Достижения
- Модуль os
- Модуль glob
Создание папок и файлов
Вот некоторые код на Python, который создает несколько групп примерных папок и файлов:
import os
## Создаем несколько групп примерных папок и файлов
for i in range(3):
## Создаем новую папку для каждой группы
folder_name = "group_" + str(i)
os.makedirs(folder_name)
## Создаем примерные файлы внутри каждой папки
for j in range(3):
file_name = "file_" + str(j) + ".txt"
file_path = os.path.join(folder_name, file_name)
with open(file_path, "w") as file:
file.write("This is a sample file.")
Вы можете открыть create_samples.py в редакторе и запустить код, чтобы увидеть результаты.
os.makedirs(path) - это функция из модуля os в Python, которая создает директорию по указанному пути. В данном случае path - это folder_name, которое формируется путем конкатенации строки "group_" с текущим значением переменной i из внешнего цикла for, получая "group_0", "group_1" и "group_2".
os.path.join(path1, path2,...) - это функция из модуля os.path, которая объединяет один или несколько путей. В данном случае path1 - это folder_name, а path2 - это file_name, которое формируется путем конкатенации строки "file_" с текущим значением переменной j из внутреннего цикла for, получая "file_0.txt", "file_1.txt" и "file_2.txt". Функция os.path.join() используется для конкатенации имени папки и имени файла, чтобы создать полный путь к файлу, так чтобы файл мог быть создан внутри папки.
С использованием функции os.path.join код гарантирует, что используется правильный разделитель для текущей операционной системы при объединении имени папки и имени файла, независимо от того, запускается ли код на Windows, Linux или macOS.
Больше о модуле Os
Модуль os в Python предоставляет способ взаимодействия с операционной системой, позволяя выполнять различные задачи, такие как создание и удаление директорий, чтение и запись файлов, а также выполнение команд.
Откройте новый интерпретатор Python.
python3
Вот несколько примеров других полезных функций, предоставляемых модулем os:
os.listdir(path): Возвращает список всех файлов и директорий в указанной директории.os.listdir('.') ## возвращает список всех файлов и директорий в текущей директорииos.remove(path): Удаляет файл по указанному пути.os.remove('file.txt') ## удаляет файл с именем 'file.txt'os.rmdir(path): Удаляет пустую директорию по указанному пути.os.rmdir('folder') ## удаляет пустую папку с именем 'folder'os.rename(src, dst): Переименовывает файл или директорию из пути src в путь dst.os.rename('file1.txt', 'file2.txt') ## переименовывает файл 'file1.txt' в 'file2.txt'os.chdir(path): Меняет текущую рабочую директорию на указанный путь.os.chdir('/home/user/documents') ## меняет текущую рабочую директорию на '/home/user/documents'os.getcwd(): Возвращает текущую рабочую директорию.os.getcwd() ## возвращает текущую рабочую директорию, например, '/home/user/documents'
Обратите внимание, что большинство вышеперечисленных функций вызовет исключение (FileNotFoundError, OSError и т.д.), если указанный файл или директория не существует или у вас нет необходимых прав.
Обход дерева директорий
os.walk(top, topdown=True, onerror=None, followlinks=False) - это функция из модуля os в Python, которая генерирует имена файлов в дереве каталогов, обходя дерево сверху вниз или снизу вверх. По умолчанию os.walk() генерирует имена файлов в дереве каталогов сверху вниз. Для каждой директории в дереве, корневой директорией которого является директория top (включая top саму), она возвращает 3-элементный кортеж (dirpath, dirnames, filenames).
Вот пример того, как можно использовать os.walk() для вывода всех файлов в директории и ее поддиректориях:
import os
## Выводим все файлы в директории и ее поддиректориях
for root, dirs, files in os.walk('.'):
for file in files:
print(os.path.join(root, file))
Этот код начнет с текущей директории (указывается '.'), и рекурсивно пройдет по всем поддиректориям, выводя полный путь каждого файла, который он встретит.
Вот еще один пример, где можно использовать os.walk() для поиска определенного файла с определенным расширением в директории:
import os
def search_file(directory, file_extension):
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(file_extension):
print(os.path.join(root, file))
search_file('.','.txt')
Это будет искать все файлы с расширением '.txt' и выводить полный путь к файлу.
os.walk() - это мощная функция, которая может быть использована для многих задач, таких как поиск файлов, анализ структуры директорий и т.д.
Следует отметить, что os.walk - это генератор, что означает, что он генерирует значения по запросу, а не хранит их все в памяти. Это делает его эффективным для обработки больших деревьев каталогов.
Модуль Glob
Модуль glob в Python предоставляет способ поиска файлов и директорий с использованием символов подстановки. glob.glob(pathname) возвращает список путей к файлам, которые соответствуют заданному шаблону пути.
Вот пример того, как можно использовать glob.glob() для поиска всех файлов с расширением ".txt" в текущей директории:
import glob
txt_files = glob.glob('*.txt')
print(txt_files)
Этот код будет искать все файлы с расширением ".txt" в текущей директории и возвращать список путей к файлам, которые соответствуют шаблону.
Это похоже на функцию os.walk(), но он не рекурсивно ищет в поддиректориях. Он только ищет файлы, которые соответствуют заданному шаблону в текущей директории.
Вот пример того, как можно использовать glob.glob() для поиска всех файлов с расширением ".txt" во всех поддиректориях:
import glob
txt_files = glob.glob('**/*.txt', recursive=True)
print(txt_files)
Этот код будет искать все файлы с расширением ".txt" в текущей директории и всех ее поддиректориях.
В целом, glob.glob() более удобен, когда вы ищете только файлы в одной директории и ее поддиректориях. Однако, os.walk() более мощная и гибкая, так как ее можно использовать для поиска файлов в нескольких директориях или для анализа структуры дерева каталогов.
Следует отметить, что, как и os.walk, glob также является генератором, что означает, что он генерирует значения по запросу, а не хранит их все в памяти. Это делает его эффективным для обработки больших количеств файлов.
Резюме
В этом практическом занятии мы узнали, как использовать Python для манипуляции файлами и папками с помощью модулей os и glob. Мы рассмотрели, как создать новую папку, изменить текущую рабочую директорию, создать новый файл, записать в файл, закрыть файл, вывести содержимое директории и найти файлы, соответствующие определенному шаблону с использованием glob.



