避免添加到此脚本列表中的正确Python方法是什么?
我对Python非常陌生,但在开始之前我已经阅读了w3schools教程 最近的一次web搜索让我找到了这个有用的脚本,它生成了一个文件树的JSON表示避免添加到此脚本列表中的正确Python方法是什么?,python,os.path,Python,Os.path,我对Python非常陌生,但在开始之前我已经阅读了w3schools教程 最近的一次web搜索让我找到了这个有用的脚本,它生成了一个文件树的JSON表示 #!/usr/bin/env python import os import errno def path_hierarchy(path): hierarchy = { 'type': 'folder', 'name': os.path.basename(path), 'path':
#!/usr/bin/env python
import os
import errno
def path_hierarchy(path):
hierarchy = {
'type': 'folder',
'name': os.path.basename(path),
'path': path,
}
try:
hierarchy['children'] = [
>>> path_hierarchy(os.path.join(path, contents))
for contents in os.listdir(path)
]
except OSError as e:
if e.errno != errno.ENOTDIR:
raise
if os.path.basename(path).endswith('doc') or os.path.basename(path).endswith('docx'):
hierarchy['type'] = 'file'
else:
+++ hierarchy = None
return hierarchy
if __name__ == '__main__':
import json
import sys
try:
directory = sys.argv[1]
except IndexError:
directory = "/home/something/something"
print(json.dumps(path_hierarchy(directory), indent=4, sort_keys=True))
我有两个问题:
对于1,这是一个列表理解。它们用于从另一个列表中建立一个列表
对于2,实际上,这里的问题是您不希望将
None
s添加到hierarchy['children']
。这可以通过两种不同的方式完成,但要做到这一点,我只需要修改您的>
行
如果您有Python 3.8+,则可以使用,并在列表中添加一个If
检查:
hierarchy['children'] = [
child := path_hierarchy(os.path.join(path, contents))
for contents in os.listdir(path)
if child # Only add a child if the child is truthy (Not None)
]
如果没有Python 3.8,您需要将该块转换为完整的for
循环:
hierarchy['children'] = []
for contents in os.listdir(path):
child = path_hierarchy(os.path.join(path, contents))
if child:
hierarchy['children'].append(child)
两者本质上是等价的
不过,这里的要点是在将孩子添加到树中之前检查孩子是什么。1。在Python教程中查找“列表理解”。@Barmar感谢您的帮助suggestion@Carcigenicate我的理解是''json.dumps''调用只在流程结束时进行一次,而不是每个条目进行一次。我错了吗?要搜索
doc
或docx
,可以执行以下操作。如果您所说的2
是指希望文件为空,只需返回一个空字符串(“”),而不是无。谢谢,非常清楚。现在我已经跟进了阅读列表理解的建议,我明白了。非常感谢。