仅在当前目录中列出文件
在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.listdir
和os.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更好