Пишем небольшой терминал на python #1. Файловая система

от автора

Всем привет, сегодня мы начнём писать небольшой терминал на Python с собственной файловой системой (виртуальной и мало чего умеющей).

#1 Файловая система — Вы здесь

#2 Приложения

#3 Обработчик команд

#4 Терминал

Структура файлов в нашем проекте

Вот как находятся файлы нашего терминала:

| pyterminal |-- filesystem.py |-- terminal.py |-- com_handler.py |-- apps |--- notepad.py |--- compiler.py |--- brainf.py |--- calculator.py |--- file_manager.py |--- browser.py

Сейчас наш файл это filesystem.py.

Пишем файловую систему

В этом заголовке будут реализованы классы для файлов и также диска.

Импортируем нужную библиотеку:

try:   from dataclasses import * except:   #ниже 3.7   raise SystemExit('Данная версия должа быть 3.7 и выше')

Импортируем библиотеку для датаклассов и если не получилось то это python версии 3.6 и ниже. Так что выходим с сообщением о версии.

Класс для ошибки:

class FSerror(Exception):   pass

Слишком легко чтобы объяснять.

Теперь класс для файла:

#тут сами файлы files = {}  @dataclass class File:   '''   Класс файла   name (str): имя файла   text (any): содержимое файла   '''   name: str   text: str    def save(self):     files[self.name] = self.text

any — это любой тип

save — метод чтобы сохранить файл

name — параметр имени

text — параметр где текст

Класс для диска:

class Disk:   '''   Класс диска   name (str): имя диска   '''   def __init__(self, name):     self.name = name     self.children = []    def add(self, file):     if file in files:       self.children.append(file)     else:       raise FSerror(f'Файл "{file}" не найден')    def get(self, name):     if name in self.children:       return files[name]     raise FSerror(f'Файл "{name}" не найден')    def delete(self, name):     if name in self.children:       del files[name]     raise FSerror(f'Файл "{name}" не найден')  c = Disk('C:')

Получается лишь один диск. И это диск «C»

add — добавить файл в диск

get — получить файл в диске

delete — удалить файл

Теперь объявим переменную __all__ (чтобы не было не нужных использований):

__all__ = ['File', 'files', 'c']

Весь код.

try:   from dataclasses import * except:   #ниже 3.7   raise SystemExit('Данная версия должа быть 3.7 и выше')  class FSerror(Exception):   pass  #тут сами файлы files = {}  @dataclass class File:   '''   Класс файла   name (str): имя файла   text (str): содержимое файла   '''   name: str   text: str    def save(self):       files[self.name] = self.text  class Disk:   '''   Класс диска   name (str): имя диска   '''   def __init__(self, name):     self.name = name     self.children = []    def add(self, file):     if file in files:       self.children.append(file)     else:       raise FSerror(f'Файл "{file}" не найден')    def get(self, name):     if name in self.children:       return files[name]     raise FSerror(f'Файл "{name}" не найден')    def delete(self, name):     if name in self.children:       del files[name]     raise FSerror(f'Файл "{name}" не найден')  c = Disk('C:')  __all__ = ['File', 'files', 'c']

Всего 53 строчек кода. Очень мало но работает.

Итог этой части.

Мы сделали файловую систему для терминала. Вот пример использования:

#в PyShell >>> hello = File('hello', '123') >>> hello.save() >>> c.add('hello') >>> print(c.get('hello')) 123 >>> c.delete('hello') >>> print(c.get('hello')) Traceback (most recent call last):   File "<pyshell#2>", line 1, in <module>     print(c.get('hello'))   File "C:\Users\DRA\Desktop\owner.py", line 44, in get     raise FSerror(f'Файл "{name}" не найден') FSerror: Файл "hello" не найден >>> 

Готово. Продолжение следует.


ссылка на оригинал статьи https://habr.com/ru/articles/901814/


Комментарии

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

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