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())