只列出当前目录下的文件

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

似乎确实有类似的解决方案,但它们似乎不适合我。下面是我的代码片段:

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

假设在当前目录中有两个文件,holygrail.py和Tim。我也有一个文件夹,里面有两个文件——我们叫他们亚瑟和兰斯洛特吧。当我运行脚本时,这是我得到的:

holygrail.py
Tim
Arthur
Lancelot

我对holygrail.py和Tim很满意。但亚瑟和兰斯洛特这两份文件,我不想列出来。

496806 次浏览

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

你可以使用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.

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

例子: < br >

import os
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不是一个完整的路径,而是相对于当前目录。

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

(谢谢因果关系提示)

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()来实现

Python 3.5.2已测试;

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.walk文档在这里,并讨论了三重列表被创建和自上而下的影响。

这里记录的.clear ()用于清空列表

通过清除os中的相关列表。走路,你可以影响它的结果,以满足你的需要。

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

import os


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

os.listdir()快。__abc1 __abc3 __abc2。

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

你可以用__abc0来改进这段代码,如下所示。

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

如果能指向os就更好了。行走当前工作目录。

import os
cwd = os.getcwd()
for subdir, dirs, files in os.walk(cwd, topdown=True):
del dirs[:]  # remove the sub directories.
for file in files:
do some stuff
print file

你可以使用pathlib模块。

from pathlib import Path
x = Path('./')
print(list(filter(lambda y:y.is_file(), x.iterdir())))

列出特定文件夹中的文件,不包括os.walk子文件夹中的文件,使用:

_, _, file_list = next(os.walk(data_folder))