仅在当前目录中列出文件

在Python中,我只想列出当前目录中的所有文件。 我不想从任何子目录或父项列出的文件。

那里似乎也有类似的解决scheme,但他们似乎并没有为我工作。 这是我的代码片段:

import os for subdir, dirs, files in os.walk('./'): for file in files: do some stuff print file 

假设我有2个文件,holygrail.py和Tim在我的当前目录中。 我也有一个文件夹,里面包含两个文件 – 我们称它们为Arthur和Lancelot。 当我运行脚本时,这是我得到的:

 holygrail.py Tim Arthur Lancelot 

我很高兴holygrail.py和蒂姆。 但是这两个文件,亚瑟和兰斯洛特,我不想上市。

只需使用os.listdiros.path.isfile而不是os.walk

例:

 files = [f for f in os.listdir('.') if os.path.isfile(f)] for f in files: # do something 

但是在将其应用到其他目录时要小心,比如

 files = [f for f in os.listdir(somedir) if os.path.isfile(f)]. 

这是行不通的,因为f不是完整的path,而是相对于当前目录。

因此,要在另一个目录上过滤,请执行os.path.isfile(os.path.join(somedir, f))

(感谢提示的因果关系 )

你可以使用os.listdir来达到这个目的。 如果您只需要文件而不需要目录 ,则可以使用os.path.isfile过滤结果。

例:

 files = os.listdir(os.curdir) #files and directories 

要么

 files = filter(os.path.isfile, os.listdir( os.curdir ) ) # files only files = [ f for f in os.listdir( os.curdir ) if os.path.isfile(f) ] #list comprehension version. 
 import os destdir = '/var/tmp/testdir' files = [ f for f in os.listdir(destdir) if os.path.isfile(os.path.join(destdir,f)) ] 

而不是os.walk ,只需使用os.listdir

你可以使用os.scandir() 。 stdlib中的新function从Python 3.5开始。

 import os for entry in os.scandir('.'): if entry.is_file(): print(entry.name) 

os.listdir()更快。 os.walk() 实现 os.scandir()

这可以用os.walk()完成

python3.5.2testing;

 import os for root, dirs, files in os.walk('.', topdown=True): dirs.clear() #with topdown true, this will prevent walk from going into subs for file in files: #do some stuff print(file) 

删除dirs.clear()行,再次包括子文件夹中的文件。

更新与参考 ;

os.walklogging在这里,谈论正在创build的三重列表和自上而下的影响。

.clear()logging在这里清空列表

所以通过从os.walk清除相关列表,您可以将其结果影响到您的需求。

我的解决scheme是:

 import re p = re.compile('[az]+', re.IGNORECASE) words = p.findall("Hello, world! I'm a coder") 

我认为这个解决scheme更好