Как создать папку в python
Перейти к содержимому

Как создать папку в python

  • автор:

Как создать папку в python

Ряд возможностей по работе с каталогами и файлами предоставляет встроенный модуль os . Хотя он содержит много функций, рассмотрим только основные из них:

  • mkdir() : создает новую папку
  • rmdir() : удаляет папку
  • rename() : переименовывает файл
  • remove() : удаляет файл

Создание и удаление папки

Для создания папки применяется функция mkdir() , в которую передается путь к создаваемой папке:

import os # путь относительно текущего скрипта os.mkdir("hello") # абсолютный путь os.mkdir("c://somedir") os.mkdir("c://somedir/hello")

Для удаления папки используется функция rmdir() , в которую передается путь к удаляемой папке:

import os # путь относительно текущего скрипта os.rmdir("hello") # абсолютный путь os.rmdir("c://somedir/hello")

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

Для переименования вызывается функция rename(source, target) , первый параметр которой — путь к исходному файлу, а второй — новое имя файла. В качестве путей могут использоваться как абсолютные, так и относительные. Например, пусть в папке C://SomeDir/ располагается файл somefile.txt . Переименуем его в файл «hello.txt»:

import os os.rename("C://SomeDir/somefile.txt", "C://SomeDir/hello.txt")

Удаление файла

Для удаления вызывается функция remove() , в которую передается путь к файлу:

import os os.remove("C://SomeDir/hello.txt")

Существование файла

Если мы попытаемся открыть файл, который не существует, то Python выбросит исключение FileNotFoundError. Для отлова исключения мы можем использовать конструкцию try. except. Однако можно уже до открытия файла проверить, существует ли он или нет с помощью метода os.path.exists(path) . В этот метод передается путь, который необходимо проверить:

filename = input("Введите путь к файлу: ") if os.path.exists(filename): print("Указанный файл существует") else: print("Файл не существует")

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

Модуль os содержит подмодуль os.path , который позволяет работать с путями файлов и папок. Импортировать этот модуль отдельно не нужно, достаточно выполнить import os .

Присоединение одной части пути к другой

Работа с путями к файлам и папкам как с простыми строками чревата множеством ошибок и может создать проблемы при переносе программы между различными операционными системами. Правильный путь объединить две части пути — это использование os.path.join :

>>> import os >>> dirpath = '../books' >>> # Здесь filename - имя файла, а не путь от места запуска программы до него: >>> for filename in os.listdir(dirpath): . # filepath = dirname + filename - сработает неправильно, так как будет не хватать "/" . filepath = os.path.join(dirname, filename) # поставит "/" или "\" за нас . with open(filepath, encoding='utf-8') as fd: . if 'нагваль' in fd.read(): . print('Книга ' + filename + ' об индейцах') 

Извлечение имени файла из пути

Функция os.path.split совершает обратное действие — отрезает имя файла или ниже лежащей папки от пути:

>>> import os >>> path = './work/project/version8/final.txt' >>> dirpath, filename = os.path.split(path) >>> print(dirpath) ./work/project/version8 >>> print(filename) final.txt >>> project_dir, version_dir = os.path.split(dirpath) >>> print(project_dir) ./work/project >>> print(version_dir) version8 

Извлечение расширения

Кроме того, может пригодиться функция os.path.splitext , котоая отрезает расширение файла:

>>> import os >>> path = './work/project/version12/final.txt' >>> base, ext = os.path.splitext(path) >>> print(base, ext, sep='\n') ./work/project/version12/final .txt 

Проверка типа файла

Кроме прочего, модуль os.path содержит функции для проверки существования файла и для определения его типа:

>>> import os >>> path = './kursach/text' >>> if os.path.exists(path): . print(path, 'существует') . if os.path.isfile(path): . print(path, '— это файл') . elif os.path.isdir(path): . print(path, '— это папка') . else: . print(path, '— это ни файл и ни папка') . else: . print(path, 'не существует') 

Манипуляции с файлами и папками

Производите все манипуляции с файлами с осторожностью, придерживайтесь правила «семь раз отмерь — один раз отрежь». Не забывайте программно производить все возможные проверки перед выполнением операций.

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

Нет ничего проще, чем создать пустой файл, достаточно открыть несуществующий файл с флагом ‘x’ :

>>> with open('empty.txt', 'x'): . pass 

Конечно, можно было бы использовать флаг ‘w’ , но тогда уже существующий файл был бы стёрт. С флагом ‘x’ open либо создаст новый файл, либо выбросит ошибку.

Создание папки

Для создания новой папки используйте os.mkdir(name) . Эта функция выбросит ошибку, если по указанному пути уже существует файл или папка. Если вам нужно создать сразу несколько вложенных папок, то смотрите функцию os.makedirs(name, exist_ok=False) .

Перемещение и переименование

Для удобной манипуляции с файлами и папками в стандартной библиотеки Python существует специальный модуль shutil . Функция shutil.move(source, destination) позволяет вам переместить любой файл или папку (даже непустую). Обратите внимание, что если destination — это уже существующая папка, то файл/папка будет перемещена внутрь неё, в остальных случаях файл/папка будут скопированы точно по нужному адресу. В случае успеха, функция вернёт новое местоположение файла. Если destination существует и не является папкой, то будет выброшена ошибка.

>>> import shutil >>> source = 'my_poem.txt' >>> destination = 'trash' >>> # Создаем папку назначения >>> os.mkdir(destination) >>> # Перенесем файл внутрь папки >>> path = shutil.move(source, destination) >>> print(path) trash/my_poem.txt >>> # Перенесем файл обратно >>> new_name = 'poem.txt' >>> final_path = shutil.move(path, new_name) >>> print(final_path) poem.txt 

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

Копирование

Скопировать файл можно с помощью функции shutil.copy(source, destination) . Правила расположения копии будут те же, что и при использовании shutil.move , за тем исключением, что если destination существует и не является файлом, то он будет заменён и ошибки это не вызовет.

Скопировать папку для операционной системы сложнее, ведь мы всегда хотим скопировать не только папку, но и её содержимое. Для копирования папок используйте shutil.copytree(source, destination) . Обратите внимание, что для этой функции destination всегда должно быть путём конечного расположения файлов и не может быть уже существующей папкой.

Удаление

Удалить файл можно с помощью функции os.remove , а пустую папку с помощью функции os.rmdir .

А вот для удаления папки с содержимым вновь понадобится shutil . Для удаления такой папки используйте shutil.rmtree .

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

Домашняя работа

  1. В текущей папке лежат файлы с расширениями .mp3 , .flac и .oga . Создайте папки mp3 , flac , oga и положите туда все файлы с соответствующими расширениями.
  2. В текущей папке лежит две других папки: vasya и mila , причём в этих папках могут лежать файлы с одинаковыми именами, например vasya/kursovaya.doc и mila/kursovaya.doc . Скопируйте все файлы из этих папок в текущую папку назвав их следующим образом: vasya_kursovaya.doc , mila_test.pdf и т.п.
  3. В текущей папке лежат файлы следующего вида: S01E01.mkv , S01E02.mkv , S02E01.mkv и т.п., то есть все файлы начинаются с S01 или S02 . Создайте папки S01 и S02 и переложите туда соответствующие файлы.
  4. В текущей папке лежат файлы вида 2019-03-08.jpg , 2019-04-01.jpg и т.п. Отсортируйте файлы по имени и переименуйте их в 1.jpg , 2.jpg , …, 10.jpg , и т.д.
  5. В текущей папке лежат две другие папки: video и sub . Создайте новую папку watch_me и переложите туда содержимое указанных папок (сами папки класть не надо).
  6. В текущей папке лежат файлы типа Nina_Stoletova.jpg , Misha_Perelman.jpg и т.п. Переименуйте их переставив имя и фамилию местами.
  7. В текущей папке лежит файл list.tsv , в котором с новой строки написаны имена некоторых других файлов этой папки. Создайте папку list и переложите в неё данные файлы.

Для тестирования вашей программы положите в репозиторий файлы и папки с соответствующими именами. Файлы должны быть пустыми, если не указано обратного.

Модуль Python os — примеры создания и работы с папками и путями

Работа с папками и создание путей с модулем OS в Python

Модуль Python OS используется для работы с операционной системой и является достаточно большим, что бы более конкретно описать его применение. С помощью его мы можем получать переменные окружения PATH, названия операционных систем, менять права на файлах и многое другое. В этой статье речь пойдет про работу с папками и путями, их создание, получение списка файлов и проверка на существование. Примеры приведены с Python 3, но и с предыдущими версиями ошибок быть не должно.

Модуль OS не нуждается в дополнительной установке, так как поставляется вместе с инсталлятором Python.

Навигация по посту

  • Получение директорий и списка файлов
    • Получение файлов через listdir
    • Получение полного абсолютного пути к файлам
    • Исключение каталогов или файлов из списка
    • Получение расширения файлов
    • Проверка директорий и файлов на существование

    Получение директорий и списка файлов

    Есть несколько способов вернуть список каталогов и файлов по указанному пути. Первый способ используя os.walk, который возвращает генератор:

    import os path = 'C:/windows/system32/drivers/' print(path)

    Получение списка папок и файлов с библиотекой os в Python

    Такие объекты можно итерировать для понятного отображения структуры:

    import os path = 'C:/Folder1' for el in os.walk(path): print(el)

    Обработка списка директорий и файлов с библиотекой os в Python

    Сам кортеж делится на 3 объекта: текущая директория, имя вложенных папок (если есть), список файлов. Я так же разделил их на примере ниже:

    import os path = 'C:/Folder1' for dirs,folder,files in os.walk(path): print('Выбранный каталог: ', dirs) print('Вложенные папки: ', folder) print('Файлы в папке: ', files) print('\n')

    Разделение директорий и папок с библиотекой os в Python

    Os.walk является рекурсивным методом. Это значит, что для поиска файлов в конкретной директории вы будете итерировать и все вложенные папки. Обойти это с помощью самого метода нельзя, но вы можете использовать break так как os.walk возвращает указанную директорию первой. Можно так же использовать next():

    import os path = 'C:/Folder1' for dirs,folder,files in os.walk(path): print('Выбранный каталог: ', dirs) print('Вложенные папки: ', folder) print('Файлы в папке: ', files) print('\n') # Отобразит только корневую папку и остановит цикл break # Отобразит первый итерируемый объект directory = os.walk(path) print(next(directory))

    Вывод первой директории с OS walk в Python

    Получение файлов через listdir

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

    import os path = 'C:/Folder1' directory = os.listdir(path) print(directory)

    Вывод списка файлов и папок с библиотекой os.listdir в Python

    Получение полного абсолютного пути к файлам

    Для последующего чтения файла нам может понадобится абсолютный путь. Мы можем использовать обычный метод сложения строк или метод os.path.join, который сделает то же самое, но и снизит вероятность ошибки если программа работает на разных ОС:

    import os path = 'C:/Folder1' for dirs,folder,files in os.walk(path): print('Выбранный каталог: ', dirs) print('Вложенные папки: ', folder) print('Файлы в папке: ', files) print('Полный путь к файлу: ', os.path.join(dirs, files)) 

    Получение абсолютного пути с os.path.join в Python

    Исключение каталогов или файлов из списка

    У нас может быть список полных путей, например из списка выше, из которого мы хотим исключить папки или файлы. Для этого используется os.path.isfile:

    import os path = ['C:/Folder1', 'C:/Folder1/Folder2/file2.txt'] for el in path: if os.path.isfile(el): print('Это файл: ', el) else: print('Это папка: ', el)

    Проверка папок и файлов с os.path.os.isfile()

    Такой же принцип имеют следующие методы:

    • os.path.isdir() — относится ли путь к папке;
    • os.path.islink() — относится ли путь к ссылке;

    Получение расширения файлов

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

    import os path = ['C:/Folder1', 'C:/Folder1/Folder2/file2.txt'] for el in path: print(os.path.splitext(el))

    Получение расширений файлов с os.path.splittext в Python

    os.path.basename(path) — вернет имя файла и расширение.

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

    Методы по изменению папок следующие:

    • os.mkdir() — создаст папку;
    • os.rename() — переименует;
    • os.rmdir() — удалит.
    import os # Имя новой папки path = 'C:/Folder1/NewFolder' # Ее создание os.mkdir(path) # Переименуем папку os.rename(path, 'C:/Folder1/NewFolder2') # Удалим os.rmdir('C:/Folder1/NewFolder2') 

    Создание и удаление директорий в Python с os.mkdir и os.rmdir

    Если попытаться создать несколько вложенных папок сразу, используя предыдущий пример, появится ошибка FileNotFoundError. Создание папок включая промежуточные выполняется с os.makedirs():

    import os path = 'C:/Folder1/Folder1/Folder1/' os.makedirs(path)

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

    Если мы пытаемся создать папку с существующим именем, то получим ошибку FileExistsError. Один из способов этого избежать — использование os.path.exists(), который вернет True в случае существования файла или папки:

    import os path = ['C:/Folder1/file1.txt', 'C:/Folder1/NotExistFolder'] for el in path: if os.path.exists(el): print('Такой путь существует: ', el) else: print('Такого пути нет', el)

    Проверка существование пути с os.path.exists в Python

    Получение и изменение текущей директории

    Запуская любую программу или консоль, например CMD, мы это делаем из определенной директории. С этой и соседней директорией мы можем работать без указания полного пути. Для того что бы узнать такую директорию в Python используется метод os.getcwd():

    import os current_dir = os.getcwd() print(current_dir)

    Получение текущей директории с os.getcwd в Python

    В директории ‘D:\’ сохранен мой файл, с которого я запускаю методы. Вы можете изменить такую директорию с os.chdir() . Такой подход удобен, когда файлы, с которыми вы работаете в основном находятся в другом месте и вы сможете избежать написания полного пути:

    import os current_dir = os.getcwd() print(current_dir) new_dir = os.chdir('D:/newfolder/') print(os.getcwd())

    Изменение директории с Python os.chdir

    Так же как и в любых языках, в любых методах описанных выше, вы можете использовать ‘..’ для работы с директорией выше или ‘/’ для работы со внутренней:

    import os # Текущая директория print(os.getcwd()) # Переход во внутреннюю old_dir = os.chdir('/newfolder/') print(os.getcwd()) # Переход на уровень выше new_dir = os.chdir('..') print(os.getcwd())

    Как в python создать папку с файлами c определенным именем?

    Здравствуйте!
    Как в python создать папку с файлами c определенным именем?

    К примеру имя test. Создастся папка с файлами:
    -test
    —_test.sass
    —test.pug

    В файле «_test.sass» текст «.test»;
    В файле «_test.pug» текст «section.test»;

    • Вопрос задан более двух лет назад
    • 277 просмотров

    Комментировать
    Решения вопроса 1

    Sergomen

    Просто делай добро и оно вернётся

    import os os.mkdir("test") f = open("test/_test.sass","w") f.write(".test") f.close() f = open("test/__test.pug","w") f.write("section.test") f.close()

    Ответ написан более двух лет назад
    Нравится 2 2 комментария

    it_proger29

    Владимир Куликов @it_proger29 Автор вопроса

    import os name = input('Введи имя секции: ') folder_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), name) folder_path_n = os.path.join(os.path.dirname(os.path.abspath(__file__))) if not os.path.isdir(folder_path): os.mkdir(folder_path) with open(os.path.join(folder_path, f'_.sass'), 'w', encoding='utf-8')as f: f.write('.test') with open(os.path.join(folder_path, f'.pug'), 'w', encoding='utf-8') as f: f.write('section.test') with open(os.path.join(folder_path_n, 'common.sass'), 'r', encoding='utf-8') as ct: cmr = ct.read() ct.close() with open(os.path.join(folder_path_n, 'common.sass'), 'w', encoding='utf-8') as f: f.write(f'\n@import /_')

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *