How to get only files in directory?
我有这样的代码:
1 2 3 4 5
| allFiles = os.listdir(myPath)
for module in allFiles:
if 'Module' in module: #if the word module is in the filename
dirToScreens = os.path.join(myPath, module)
allSreens = os.listdir(dirToScreens) |
现在,一切正常,我只需要改变线路
1
| allSreens = os.listdir(dirToScreens) |
只获取文件列表,而不是文件夹列表。因此,当我使用
1
| allScreens [ f for f in os.listdir(dirToScreens) if os.isfile(join(dirToScreens, f)) ] |
它说
1
| module object has no attribute isfile |
注意:我使用的是Python 2.7
- 你们的例子中有很多抄写错误。你能不能用你正在使用的代码编辑你的问题?
- ==不是赋值操作符,所以allFiles == os.listdir(path)行是一个拼写错误吗?
- 做得很好,但你还是没有把它们都弄到手。请重新编辑,确保您正在直接复制和粘贴您的程序。
- @MattDMo hm我不能复制粘贴,代码在我的电脑上,由于某些原因,我不能张贴,所以使用我的电脑,所以我必须重新输入代码在我的Mac。
- allScreens = [f for f in allScreens if '。在f]
你可以使用os.path.isfile方法:
1 2 3
| import os
from os import path
files = [f for f in os.listdir(dirToScreens) if path.isfile(f)] |
或者如果你觉得功能正常:D
1
| files = filter(path.isfile, os.listdir(dirToScreens)) |
- 嗯,只是确认一下,应该是os.listdir('.')而不是os.listdir(dirToScreens)?因为之前我写的是"allSreens = os.listdir(dirToScreens)"..我需要一个文件列表在dirToScreens。
- 对不起,将"."替换为listdir所需的任何地址。我只是使用"."来说明一点:)。我将修复它。
- 是的,只是打错了。
- 嗯,当我打印文件时,由于某种原因,它会给我空列表。知道为什么吗?
- 哪一个?他们两人吗?
- 嗯是的,。但是我将把答案标记为正确的,因为这可能是我代码的另一部分的问题。你的答案似乎是正确的。
- 这很奇怪,因为当我执行"allSreens = os.listdir(dirToScreens)"时,它会给出目录中所有的文件夹和文件,所以看起来过滤文件应该可以很好地工作:/
- 如果您想确保该方法是正确的,请在只有ramdom dir(如'.')的交互式解释器上尝试它。如果它在那里工作,那么代码的另一部分可能有问题。您确定您的目录中有任何文件吗?也许它们都是目录。
- 此方法仅当dirToScreens是当前文件夹时才有效,因为os.listdir只返回文件名(而不是完整的路径)。
- 我的目的是回答这个问题,而不是提出一个通用的解决方案。通过使用Python的abspath(): stackoverflow.com/questions/51520/&hellip来调整它应该很容易;
- @PauloBu我同意,改编它很简单。我只是觉得说明这种方法的局限性可能对本文的未来读者有用。
- abspath()对我不起作用,因为它相对于这里正在执行代码的目录链接。而是使用:files = [f for f in os.listdir(dirToScreens) if path.isfile(path.join(dirToScreens, f))]
- stackoverflow.com/a/3207973/52074
"如果您需要一个文件名列表,其中所有文件名都具有特定的扩展名、前缀或中间的任何公共字符串,那么使用glob而不是自己编写代码来扫描目录内容。"
1 2 3 4
| import os
import glob
[name for name in glob.glob(os.path.join(path,'*.*')) if os.path.isfile(os.path.join(path,name))] |
- 由于某种原因,这是返回一个空列表给我…
- 固定!谢谢你!
- @juankysmith hm,它仍然给我一个空列表:/
- 我修改后你测试过吗?
- @juankysmith我做了"allScreens = [name for name in global .glob(os.path.join(path,'.')) if os.path.isfile(os.path.join(path,name))打印all screen",它打印空列表。我把它改回"allScreens = os.listdir(dirToScreens) print allScreens",它打印的列表将所有文件和文件夹。
- 所以你没有做我建议你做的:)……glob.glob (os.path。加入(路径"*。* '))…复制粘贴时要小心
- @juankysmith,当你说"global .glob(os.path.join(path,'.')"时,我应该把它改为"global .glob(os.path.join(dirToScreens,'.')"吗?
- @juankysmith哎呀,不,我做了编辑并添加了' *。*"由于某种原因,当我在网上发帖时,它把*拿走了……另外,"os.path.isfile(os.path.join(path,name))"应该是"os.path.isfile(os.path.join(dirToScreens,name))",对我来说,对吗?