Обработка файлов и папок

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Этот практикум предназначен для того, чтобы помочь вам понять, как манипулировать файлами и папками с использованием Python. Мы будем использовать модули os и glob, которые предоставляют способ взаимодействия с файловой системой и выполнять общие операции, такие как создание, удаление и перемещение файлов и директорий.

Достижения

  • Модуль os
  • Модуль glob

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python/ControlFlowGroup -.-> python/for_loops("For Loops") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") python/FileHandlingGroup -.-> python/file_operations("File Operations") python/AdvancedTopicsGroup -.-> python/generators("Generators") python/PythonStandardLibraryGroup -.-> python/os_system("Operating System and System") subgraph Lab Skills python/for_loops -.-> lab-77{{"Обработка файлов и папок"}} python/importing_modules -.-> lab-77{{"Обработка файлов и папок"}} python/standard_libraries -.-> lab-77{{"Обработка файлов и папок"}} python/raising_exceptions -.-> lab-77{{"Обработка файлов и папок"}} python/file_operations -.-> lab-77{{"Обработка файлов и папок"}} python/generators -.-> lab-77{{"Обработка файлов и папок"}} python/os_system -.-> lab-77{{"Обработка файлов и папок"}} end

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

Вот некоторые код на 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.