在 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 中从头开始编写目录结构(虚构文件/文件夹等)?的主要内容,如果未能解决你的问题,请参考以下文章