Перейти к содержимому

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

  • автор:

Как создать папку а в этой папке создать текстовый файл и записать туда текст? Python [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

Закрыт 1 год назад .

у меня есть переменная с путём filename = f’src/download/video_‘ , папки scr/download есть, мне нужно создать папку video_ , где random.randint(1, 99999) это рандомные цифры что-бы папки не повторялись, и в этой папке( video_ ) нужно создать к примеру файл name.txt и записать туда свой текст, я не знаю как мне это сделать. Помогите, пожалуйста

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

Модуль 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»;

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

    Комментировать
    Решения вопроса 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 не будет опубликован. Обязательные поля помечены *