return [f[:f.rindex(".")] for f in os.listdir(path) if f and len(f) >= 4 and f[-2:]
== "py" and f[-1] != "o" and f[-1] != "c"]
我在此链接的脚本中找到了它:
http://www-users.cs.umn.edu/~mein/blender/plugins/python/misc/scriptloader/TheOneScript.py
我知道我需要从其扩展名(.py)中拆分文件名..但为什么len(f)> = 4
然后f [-1]!=“o”或“c”......这是什么意思?
答案 0 :(得分:3)
长度检查是因为最短的敏感文件名是单个字符后跟.py
,后面至少有4个字符。
最后的检查似乎是尝试将编译后的文件放入.pyc
和.pyo
,但这完全没必要,因为它们与条件f[-2:] == "py"
不匹配。
要将文件名拆分为根和扩展名,您还可以考虑使用os.path.splitext
。
[root for (root, ext) in map(os.path.splitext, os.listdir(path)) if ext == '.py']
答案 1 :(得分:2)
我建议
[f[:-3] for f in glob.iglob("*.py")]
作为给定代码的简明替代。
答案 2 :(得分:1)
此行返回目录中长度至少为4个字符的所有文件,不以o
或c
结尾,但以py
结尾。它会从文件中删除剩余文件,因此blubber.py
将转换为blubber
。我建议以下解决方案:
[x[:-3] for x in os.listdir('.') if x.endswith(".py")]
答案 3 :(得分:0)
f[-1]
是可迭代中的最后一个元素,在本例中是f
的最后一个字母
这可能会更清楚:
[name for name, ext in [f.rsplit('.', 1) for f in os.listdir('.')] if ext == 'py']