如何列出一个目录下的所有文件?
我更喜欢使用glob
模块,因为它可以进行模式匹配和扩展。
import glob print(glob.glob("/home/adam/*"))
它的模式匹配非常直观。
import glob # All files and directories ending with .txt and that don't begin with a dot: print(glob.glob("/home/adam/*.txt")) # All files and directories ending with .txt with depth of 2 folders, ignoring names beginning with a dot: print(glob.glob("/home/adam/*/*.txt"))
它将返回一个包含所查询文件和目录的列表:
['/home/adam/file1.txt', '/home/adam/file2.txt', .... ]
请注意,glob
会忽略以点 .
开头的文件和目录,因为它们被认为是隐藏的文件和目录,除非匹配的模式类似于 .*
。
使用glob.escape
来转义不需要作为模式的字符串:
print(glob.glob(glob.escape(directory_name) + "/*.txt"))
os.listdir()
返回目录中的所有内容,包括文件和目录。
os.path
的 isfile()
可以用于仅列出文件:
from os import listdir from os.path import isfile, join onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
或者,os.walk()
对于它访问的每个目录,生成两个列表 -- 一个用于文件,一个用于目录。如果你只想要顶层目录,你可以在它第一次生成时打断它:
from os import walk f = [] for (dirpath, dirnames, filenames) in walk(mypath): f.extend(filenames) break
或者,更短:
from os import walk filenames = next(walk(mypath), (None, None, []))[2] # [] if no file