在 python 中从头开始编写目录结构(虚构文件/文件夹等)?

Posted

技术标签:

【中文标题】在 python 中从头开始编写目录结构(虚构文件/文件夹等)?【英文标题】:Code a directory structure from scratch (imaginary files / folders etc.) in python? 【发布时间】:2018-02-07 20:26:47 【问题描述】:

如果这已经回答了,请告诉我!!!

背景信息:

您好,我是 Max,14 岁,来自德国。 目前,我正在研究一个小游戏的机制,我想用 Python 编写代码,只是为了学习这门语言并适应它。在游戏中,您必须在“计算机”上找到并删除虚构的“病毒”。为此,您必须浏览文件夹并执行几个命令,就像在普通终端中一样。

实际问题:

我的问题是浏览目录。我可能没有建立结构的最佳方法,我也不知道更好的方法。也许这里的任何人都有一个想法。我真的不想使用真正的文件夹,只是从我的程序中访问它们,因为我真的想学习这种语言。 我会给你代码,这是必要的。

我有一个列表(如下所示),其中包含我的程序目前接受的所有命令和第二个列表,其中包含每个单独的评论所需的属性数量。这些属性在第三个列表中,可以通过命令本身的索引来访问它们,这就是变量“index”的含义。

comm = ['hello', 'help', 'cd', 'ls', 'cdir', 'rdir', 'cfil', 'rfil', 'detc']
commAtt = ['0', '0', '1', '1', '2', '2', '2', '2', '1']
attribute = ['0', '0', '* directory *', '* directory *', '* directory *  * new name *',
         '* directory *  * new name *', '* file path *  * new name *',
         '* file path *  * new name *', '* malware / spamware / adware *']


# Directories
total = 7
layer0 = ['Boot']
# layer1
Boot = ['System', 'Users', 'Applications']
#layer2
System = ['Library', 'System files']
Users = ['Phillipp Dorson', 'Root']
Applications = ['Corel .exe', 'Text Editor.exe', 'Python lib', 'Internet.exe']
# layer3
PhillippD = ['Documents', 'Downloads', 'Pictures', 'Movies', 'Desktop',
                 'Music']
# layer4
Documents = ['Job_Application.txt', 'Cover_Page.corel']

def dirCheck(command, path, index):
count = 0
layerI = 'null'
dir = layerI
for pathI in range(0, len(path) - 1):
    print(pathI)
    for layerI in layer0:
        dir = layerI
        if path[pathI] == layerI:
            print('hellu')
            break
        else:
            count += 1
            break

    print(dir)
    for layerI in dir:
        print(layerI)
        if path[pathI] == layerI:
            print('lulloooo')
            break
        else:
            count += 1

正如您可能看到的,我目前正在尝试将一个变量 (dir) 用于另一个变量(实际上是数组,其中包含文件和文件夹,如“Boot[]”或“Documents[]”),它不似乎不太好用。我试图避免单独输入所有列表,但是如果不可能以不同的方式进行,我会的。 提前致谢,马克斯。

编辑:

按照@rczajka 的建议,我用字典制作了文件结构。但是,我仍然不太明白我应该如何循环遍历这个“系统”,以检查输入是否有效,例如,因为我必须在字典中的字典中循环,等等。这就是我目前想出的:

directories = 
'Boot': 
    'System': 
        'Library': 
    ,
    'Users': 

    ,
    'Applications': 

    

for i in directories:      #layer 1
    print(i)
    for a in directories[i]:      #layer 2
        print(a)
        for b in directories[i][a]:      #layer 3
            print(b)

它确实有效,但我必须为每个“层”文件键入一个新循环。我不太喜欢这个想法,因为它限制了您可以在其他文件夹中拥有的文件夹数量,如果您知道我的意思的话。 我真的很感谢你们的帮助!谢谢!

【问题讨论】:

【参考方案1】:

从技术上讲,您可以通过变量名访问变量,例如使用locals()globals(),但这不是正常的做法。

通常,您会将想象中的目录定义为一种数据结构,然后为您的代码寻找一种导航方式。所以你可以从这样的开始:

imaginary_tree = 
    'Boot': 
        'System': 
            'Library':  ... ,
            'System files':  ... 
        ,
        'Users': 
            'Phillipp Dorson':  ... ,
            'Root':  ... ,
        ,
        ...
    

然后您需要了解您的代码如何维护当前路径,以便用户可以在层次结构中上下移动,以及如何区分您的虚拟文件和虚拟目录。

希望这会为您指明正确的方向,玩得开心!


编辑:

要遍历这样的结构,你可以使用递归,比如:

def print_directory(directory):
    for subdir in directory:
        print(subdir)
        print_directory(directory[subdir])

【讨论】:

非常感谢!这实际上已经帮助了我很多。但是,我仍然有一些问题在字典中的字典中翻阅等。我编辑了我的原始问题,所以我非常感谢你看看,看看你是否能再次帮助我。 我在答案中添加了一个简单的递归函数,向您展示如何迭代这样的结构。

以上是关于在 python 中从头开始编写目录结构(虚构文件/文件夹等)?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中从头开始架构:使用啥?

如何从头开始创建/编写一个简单的 XML 解析器?

Python3的pathlib模块:驯服文件系统

如何在linux环境下添加python模块路径

如何用 Python 编写 MIDI 文件?

反转附加列表或预先添加列表更便宜吗? - Python