26、数据结构_树_模拟文件系统

class Node:
def __init__(self, name, type='dir'): #name:文件名 type:用于判断文件夹还是文件
self.name = name
self.type = type
self.children = [] # 建立个空列表
self.parent = Node # 用于创建链表,连接上下之间的关系

def __repr__(self): # 打印 文件
return self.name


class FileSystemTree: # 创建文件('/')
def __init__(self):
self.root = Node('/') # 文件夹首目录用“/”表示
self.now = self.root # 文件名要在 / 下面

def mkdir(self, name): # 建立文件与文件名之间的连接(正向与反向)
if name[-1] != "/": #判断文件夹,如果不是以"/" 结尾
name += "/" # 给它加"/"

node = Node(name)
self.now.children.append(node)
# 建立文件夹与文件名进行连接
# now = 首目录。 children = 空列表(第五行) append:追加 mode:Node类下的文件名(21-->1,2行)

node.parent = self.now # 反向连接。文件名-->文件夹

def ls(self): # 首目录下的列表()
return self.now.children

def cd(self, name): #关于路径操作
if name[-1] != "/": # 判断文件夹是不是以”/“ 结尾
name += "/" # 不是加 /
if name =="../": # 当文件输入为"../"
self.now =self.now.parent # 返回上一级(链表)
return

for child in self.now.children: # 循环首文件夹下的列表(第5,14, 15行)
if child.name == name: # 如果循环出来的文件夹名等于文件名
self.now = child # now = 循环出来的文件路劲child
return

raise ValueError('invalid dir') #


tree = FileSystemTree() # 调用第一个类
tree.mkdir("var/")
tree.mkdir("bin/")
tree.mkdir("usr/")
tree.cd("bin/")
tree.mkdir("python/")
print(tree.root.children) # 打印文件夹root下面所有文件名
print(tree.ls())
posted @ 2022-05-01 04:26  yu-ye  阅读(46)  评论(0)    收藏  举报