python文件操作

时间:2011-10-25 21:09:49

标签: python file

请注意,这一行的含义是什么:

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”......这是什么意思?

4 个答案:

答案 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个字符的所有文件,不以oc结尾,但以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']