用python从头开始编写目录结构(想象的文件/文件夹等)?

2024-09-29 00:12:11 发布

您现在位置:Python中文网/ 问答频道 /正文

告诉我这个问题是否已经得到了回答

背景信息:

你好,我是马克斯,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)

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


Tags: pathnamein文件夹列表newfor字典
1条回答
网友
1楼 · 发布于 2024-09-29 00:12:11

从技术上讲,您可以使用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])

相关问题 更多 >