【问题标题】:Implement FileSystem实现文件系统
【发布时间】:2020-09-09 15:09:32
【问题描述】:

我有一家公司分配给我一个任务来实现一个 fileSystem 类,以通过 python 运行 shell 命令,而不使用任何库。有人对如何开始有任何建议吗?不太清楚如何解决这个问题。

问题:

使用 python 实现一个 FileSystem 类

根路径是'/'。
路径分隔符为“/”。
父目录可寻址为“..”。
目录名称仅包含英文字母(A-Z 和 a-z)。
所有函数都应支持相对路径和绝对路径。 所有函数参数都是最低要求/推荐参数。 可以添加任何额外的类/函数。

到目前为止我所做的工作:

class Path:

    def __init__(self, path):
        self.current_path = path.split("/")
    
    def cd(self, new_path):
        new_split = new_path.split("/")
        for i in new_split:
            if i == "..":
                new_split.pop(0)
                self.current_path = self.current_path[:-1]
        self.current_path += new_split

    def getString(self):
        return "/".join(self.current_path)

    def pwd(self, path):
        return self.current_path

    def mkdir(): 
        pass

    def rmdir():
        pass

#driver code 

fs = Path()
fs.mkdir('usr')
fs.cd('usr')
fs.mkdir('local')
fs.cd('local')
return fs.pwd()

【问题讨论】:

    标签: filesystems


    【解决方案1】:

    所以,这就是我想出的。我知道我需要清理它

    '''

    class Path:
    
        dir_stack = []
    
        def __init__(self):
            print("started")
            main_dir = {'/': {}}
            self.dir_stack.insert( len(self.dir_stack), main_dir)
    
        def getCurrentMap():
            global current_Level
            current_Level = self.dir_stack[len(self.dir_stack) - 1]
    
       
        def cd(self, folder):
            if(folder == '../'):
             self.dir_stack.pop()
    
            current_Level = self.dir_stack[len(self.dir_stack) - 1]
            current_Map = current_Level[(list(current_Level.keys())[0])]
            print('lev', current_Map)
            if folder in current_Map:
                print('here')
                self.dir_stack.insert(len(self.dir_stack), current_Map)
            else:
                print ("no existing folder")
    
        def pwd(self):
            path = ''
            print(self.dir_stack)
            for x in self.dir_stack:
                path += (list(x.keys())[0]) + '/'
            print(path)
    
        def ls(self):
            current_Level = self.dir_stack[len(self.dir_stack) - 1]
            current_Map = current_Level[(list(current_Level.keys())[0])]
            print(current_Map)
    
    
        def mkdir(self, folder_Name):
            current_Level = self.dir_stack[len(self.dir_stack) - 1]
            newDir = {folder_Name: {}}
            current_Map = current_Level[(list(current_Level.keys())[0])]
           
            if folder_Name in current_Map:
             warning = folder_Name +  ' already exists in directory'
             print(warning)
            else:
             current_Map.update(newDir)
     
        def rmdir(self, folder_Name):
            current_Level = self.dir_stack[len(self.dir_stack) - 1]
            #make global var current_Map
            current_Map = current_Level[(list(current_Level.keys())[0])]  
            if folder_Name in current_Map:
              del current_Map[folder_Name]
            else:
                print('folder doesnt exist')
    
    
    # driver code
    
    
    fs = Path()
    fs.mkdir('usr')
    fs.mkdir('new')
    fs.mkdir('files')
    fs.cd('usr')
    fs.mkdir('local')
    fs.cd('new')
    fs.pwd()
    fs.cd('../')
    fs.ls()
    # fs.mkdir('local')
    # fs.cd('local')
    fs.pwd()
    

    【讨论】:

      最近更新 更多