Python создать дерево папок

Python введение в модуль OS

В последнее время Python является одним из наиболее часто используемых языков для различных задач, таких как обработки данных, анализ данных и создание веб-сайтов. В этом процессе существуют различные задачи, которые зависят от операционной системы. Python позволяет разработчику использовать несколько OS-зависимых функций с модулем OS. Этот пакет абстрагирует функциональные возможности платформы и предоставляет функции python для навигации, создания, удаления и изменения файлов и папок. В этом руководстве вы можете узнать, как импортировать этот пакет, его основные функции и пример проекта на python, который использует эту библиотеку для задачи объединения данных.

Некоторые основные функции

Давайте рассмотрим модуль с примером кода.

Давайте получим список методов, которые мы можем использовать с этим модулем.

['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_execvpe', '_exists', '_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']

Теперь, используя метод getcwd, мы можем получить путь к текущему рабочему каталогу.

print(os.getcwd()) # C:\Users\hpandya\OneDrive\work\StackAbuse\os_python\os_python\Project

Список папок и файлов

Давайте перечислим папки / файлы в текущем каталоге, используя listdir:

print(os.listdir()) # ['Data', 'Population_Data', 'README.md', 'tutorial.py', 'tutorial_v2.py']

Как видите, у меня есть 2 папки: Data и Population_Data. У меня также есть 3 файла: файл разметки README.md и два файла Python, а именно, tutorial.py и tutorial_v2.py.

Читайте также:  Олива дерево домашний уход

Чтобы получить всю древовидную структуру папки моего проекта, давайте напишем функцию и затем используем os.walk(), чтобы перебрать все файлы в каждой папке текущего каталога.

def list_files(startpath): for root, dirs, files in os.walk(startpath): if dir!= '.git': level = root.replace(startpath, '').count(os.sep) indent = ' ' * 4 * (level) print('<><>/'.format(indent, os.path.basename(root))) subindent = ' ' * 4 * (level + 1) for f in files: print('<><>'.format(subindent, f))

Вызовите эту функцию, используя текущий путь к рабочей директории, который мы видели как это сделать ранее:

startpath = os.getcwd() list_files(startpath)
Project/ README.md tutorial.py tutorial_v2.py Data/ uscitiesv1.4.csv Population_Data/ Alabama/ Alabama_population.csv Alaska/ Alaska_population.csv Arizona/ Arizona_population.csv Arkansas/ Arkansas_population.csv California/ California_population.csv Colorado/ Colorado_population.csv Connecticut/ Connecticut_population.csv Delaware/ Delaware_population.csv .

Вывод был усечен для краткости.

Как видно из вывода, имена папок оканчиваются на /, а файлы внутри папок имеют отступ с четырьмя пробелами справа. В папке Data есть один CSV-файл с именем uscitiesv1.4.csv. Этот файл содержит данные о населении для каждого города в Соединенных Штатах. Папка Population_Data содержит папки для состояний, содержащие отдельные csv-файлы для данных о населении для каждого состояния, извлеченные из uscitiesv1.4.csv.

Изменить рабочий каталог

Давайте изменим рабочий каталог и войдем в каталог данных с названием «New York».

os.chdir('Population_Data/New York')

Теперь давайте снова запустим метод list_files, но в этом каталоге.

list_files(os.getcwd()) # New York/ # New York_population.csv

Как видите, мы вошли в папку New York в папке Population_Data.

Создать единую и вложенную структуру каталогов

Теперь давайте создадим новый каталог с именем testdir в этом каталоге.

os.mkdir('testdir') list_files(os.getcwd())
New York/ New York_population.csv testdir/

Как видите, он создает новый каталог в текущем рабочем каталоге.

Давайте создадим вложенный каталог с 2 уровнями.

os.mkdir('level1dir/level2dir')
Traceback (most recent call last): File "", line 1, in os.mkdir('level1dir/level2dir') FileNotFoundError: [WinError 3] The system cannot find the path specified: 'level1dir/level2dir'

Мы получаем ошибку. Чтобы быть конкретным, мы получаем FileNotFoundError. Вы можете спросить, почему ошибка FileNotFound, когда мы пытаемся создать каталог.

Причина: модуль Python ищет каталог с именем level1dir для создания каталога level2dir. Так как level1dir не существует, он выдает FileNotFoundError.

Для подобных целей вместо этого используется функция mkdirs(), которая может рекурсивно создавать несколько каталогов.

os.makedirs('level1dir/level2dir')

Проверьте текущее дерево каталогов,

New York/ New York_population.csv level1dir/ level2dir/ testdir/

Как мы видим, теперь у нас есть две подкаталоги в папке New York. testdir и level1dir. level1dir имеет каталог под названием level2dir.

Читайте также:  Тумба ванная 60 светлое дерево

Рекурсивно удалить один или несколько каталогов

Модуль os также имеет методы для изменения или удаления каталогов, которые я покажу здесь.

Теперь давайте удалим каталоги, которые мы только что создали, используя rmdir:

Проверьте текущее дерево каталогов, чтобы убедиться, что каталог больше не существует:

Должно получится следующее:

New York/ New York_population.csv level1dir/ level2dir/

Как видите, testdir был удален.

Давайте попробуем удалить структуру вложенных каталогов level1dir и level2dir.

OSError Traceback (most recent call last) in () ----> 1 os.rmdir('level1dir') OSError: [WinError 145] The directory is not empty: 'level1dir'

Как видно, этот код бросает ошибку OSError и это правильно. Он говорит, что каталог level1dir не пуст. Это правильно, потому что под ним есть level2dir.

С помощью метода rmdir невозможно удалить непустой каталог, аналогичный версии командной строки Unix.

Так же, как и метод makedirs(), давайте попробуем rmdirs(), который рекурсивно удаляет каталоги в древовидной структуре.

os.removedirs('level1dir/level2dir')

Давайте снова посмотрим на структуру дерева каталогов:

New York/ New York_population.csv

Это подводит нас к предыдущему состоянию каталога.

Пример с обработкой данных

До сих пор мы изучали, как просматривать, создавать и удалять структуру вложенных каталогов. Теперь давайте посмотрим, как модуль os помогает в обработке данных.

Для этого давайте поднимемся на один уровень выше в структуре каталогов.

С этим, давайте снова рассмотрим структуру дерева каталогов.

Population_Data/ Alabama/ Alabama_population.csv Alaska/ Alaska_population.csv Arizona/ Arizona_population.csv Arkansas/ Arkansas_population.csv California/ California_population.csv Colorado/ Colorado_population.csv Connecticut/ Connecticut_population.csv Delaware/ Delaware_population.csv .

Давайте объединяем данные из всех состояний, перебирая каталог каждого состояния и аналогично объединяя файлы CSV.

import os import pandas as pd # создать список для хранения данных из каждого файла list_states = [] # цикл по всем папкам и добавление их данных в список for root, dirs, files in os.walk(os.getcwd()): if files: list_states.append(pd.read_csv(root+'/'+files[0], index_col=None)) # объединить кадры в один, используя библиотеку Pandas merge_data = pd.concat(list_states[1:], sort=False)

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

Заключение

В этой статье мы кратко рассмотрели различные возможности встроенного в Python модуля os. Мы также увидели краткий пример того, как этот модуль можно использовать в мире наук о данных и аналитики. Важно понимать, что ОС может предложить гораздо больше, и исходя из потребностей разработчика, можно построить гораздо более сложную логику.

Читайте также:  Деревья которые можно посадить корнями вверх

Источник

directory-tree 0.0.3.1

Utility Package that Displays out the Tree Structure of a Particular Directory.

Ссылки проекта

Статистика

Метаданные

Лицензия: GNU General Public License v3 (GPLv3)

Сопровождающие

Классификаторы

Описание проекта

Directory Tree Package

About

Want to Display your Project/Current Working Directory as a Neat Tree? No Worries!

Directory Tree is a simple python utility package that displays out the Tree Structure of a User Defined Directory.

Currently Available for All Platforms.

Installation

Run the Following Command on your Terminal to Install directory_tree :

1 . Installing the Package using pip :

pip install directory_tree
pip3 install directory_tree

2 . Cloning the Repository:

git clone https://github.com/rahulbordoloi/Directory-Tree/  Directory-Tree pip install -e .

Usage

Function Signature

Parameters Description
dir_path Root Path of Operation. By Default, Refers to the Current Working Directory.
string_rep Boolean Flag for Direct Console Output or a String Return of the Same. By Default, It Gives out Console Output.
header Boolean Flag for Displaying [OS & Directory Path] Info in the Console. Not Applicable if string_rep=True .
max_depth Max Depth of the Directory Tree. By Default, It goes upto the Deepest Directory/File.
show_hidden Boolean Flag for Returning/Displaying Hidden Files/Directories if Value Set to True .

Run this Script in Order to Print out the Tree Structure of a User-Defined Directory DirectoryPath !

Output Examples

NOTE — Here, letseee.txt (File) and Directory 4/ (Directory) are HIDDEN in Nature.

  1. For User Specified Directory with Arguments [String Representation = True , Show Hidden Entities = True ]

Developing Directory Tree

To install directory_tree , along with the tools you need to develop and run tests, and execute the following in your virtualenv:

  • Directory Tree uses recursion. It will raise a RecursionError on really deep directory trees.
  • As the tree is lazily evaluated, it should behave well on really wide directory trees. Immediate children of a given directory are not lazily evaluated, though. It would be prompted to the last.
  • If you’re a Windows user, it is always advised to use \\ instead of \ in the address as using \ might catchup escape sequences and corrupt the address string.

Источник

Оцените статью