在Python中,我只想列出当前目录中的所有文件.我不希望从任何子目录或父目录中列出文件.
似乎有类似的解决方案,但它们似乎并不适合我.这是我的代码片段:
import os
for subdir, dirs, files in os.walk('./'):
for file in files:
do some stuff
print file
Run Code Online (Sandbox Code Playgroud)
假设我在当前目录中有2个文件,holygrail.py和Tim.我有一个文件夹,它包含两个文件 - 让我们称之为亚瑟和兰斯洛特 - 在里面.当我运行脚本时,这就是我得到的:
holygrail.py
Tim
Arthur
Lancelot
Run Code Online (Sandbox Code Playgroud)
我对holygrail.py和蒂姆很满意.但这两个档案,亚瑟和兰斯洛特,我不想上市.
slo*_*oth 339
只需使用os.listdir而os.path.isfile不是os.walk.
例:
files = [f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:
# do something
Run Code Online (Sandbox Code Playgroud)
但是将它应用到其他目录时要小心,比如
files = [f for f in os.listdir(somedir) if os.path.isfile(f)].
Run Code Online (Sandbox Code Playgroud)
哪个不起作用,因为f它不是一个完整的路径,而是相对于当前的目录.
因此,要在另一个目录上进行过滤,请执行 os.path.isfile(os.path.join(somedir, f))
(感谢提示的因果关系)
mgi*_*son 56
你可以用它os.listdir来达到这个目的.如果您只想要文件而不是目录,则可以使用过滤结果os.path.isfile.
例:
files = os.listdir(os.curdir) #files and directories
Run Code Online (Sandbox Code Playgroud)
要么
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.
Run Code Online (Sandbox Code Playgroud)
小智 15
import os
destdir = '/var/tmp/testdir'
files = [ f for f in os.listdir(destdir) if os.path.isfile(os.path.join(destdir,f)) ]
Run Code Online (Sandbox Code Playgroud)
你可以用os.scandir().stdlib中的新函数从Python 3.5开始.
import os
for entry in os.scandir('.'):
if entry.is_file():
print(entry.name)
Run Code Online (Sandbox Code Playgroud)
比...更快os.listdir().os.walk() 实施 os.scandir().
这可以通过 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)
Run Code Online (Sandbox Code Playgroud)
删除 dirs.clear() 行并再次包含子文件夹中的文件。
更新参考;
os.walk记录在这里并讨论了正在创建的三重列表和自上而下的效果。
.clear()在此处记录用于清空列表
因此,通过从 os.walk 清除相关列表,您可以根据您的需要影响其结果。
小智 5
import os
for subdir, dirs, files in os.walk('./'):
for file in files:
do some stuff
print file
Run Code Online (Sandbox Code Playgroud)
您可以改进此代码,del dirs[:]如下所示。
import os
for subdir, dirs, files in os.walk('./'):
del dirs[:]
for file in files:
do some stuff
print file
Run Code Online (Sandbox Code Playgroud)
或者如果您可以将 os.walk 指向当前工作目录,那就更好了。
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
Run Code Online (Sandbox Code Playgroud)
您可以使用 pathlib 模块。
from pathlib import Path
x = Path('./')
print(list(filter(lambda y:y.is_file(), x.iterdir())))
Run Code Online (Sandbox Code Playgroud)