赞
踩
目录
【实现代码】:
- import os
-
-
- image_path = 'F:\\test\\frames'
- # 遍历文件夹及其子文件夹中的文件,并存储在一个列表中
- # 输入文件夹路径、空文件列表[]
- # 返回 文件列表Filelist,包含文件名(完整路径)
- def get_filelist(dir, Filelist):
- newDir = dir
- if os.path.isfile(dir):
- Filelist.append(dir)
- # # 若只是要返回文件文,使用这个
- # Filelist.append(os.path.basename(dir))
- elif os.path.isdir(dir):
- for s in os.listdir(dir):
- # 如果需要忽略某些文件夹,使用以下代码
- #if s == "xxx":
- #continue
- newDir=os.path.join(dir,s)
- get_filelist(newDir, Filelist)
- return Filelist
-
- if __name__ =='__main__' :
- list = get_filelist('F:\\test\\frames', [])
- print(len(list))
- for e in list:
- print(e)
- 【补充说明】:
- 1、os.path.basename()函数用于返回路径path最后的文件名。若path以/或\结尾,那么就会返回空值。例如:
思路很简单,首先遍历目录下所有文件(这里指广义的文件),然后对文件进行判断(属性是否为目录,后缀是否为xxx)。而python提供的功能更为强大,利用os模块的walk方法能直接遍历当前目录和整个子目录的文件。
后面3个自定义选项暂时可以不考虑(详细可以参考help(os.walk)),top即顶层目录,walk返回一个生成器,迭代每个生成器会返回一个三元组(dirpath, dirnames, filenames)
,依次代表目录名,该目录下的目录类型文件列表(不包括.和..),该目录下的非目录类型文件列表。
【实现代码】
- import os
- path ='F:\\test\\frames'
- def get_filelist(dir):
- Filelist = []
- for home, dirs, files in os.walk(path):
- for filename in files:
- # 文件名列表,包含完整路径
- Filelist.append(os.path.join(home, filename))
- # # 文件名列表,只包含文件名
- # Filelist.append( filename)
- return Filelist
-
- if __name__ =="__main__":
- Filelist = get_filelist(dir)
- print(len( Filelist))
- for file in Filelist :
- print(file)
【补充说明】:
- walk(top, topdown=True, onerror=None, followlinks=False)
- Directory tree generator.
-
- For each directory in the directory tree rooted at top (including top
- itself, but excluding '.' and '..'), yields a 3-tuple
-
- dirpath, dirnames, filenames
-
- dirpath is a string, the path to the directory. dirnames is a list of
- the names of the subdirectories in dirpath (excluding '.' and '..').
- filenames is a list of the names of the non-directory files in dirpath.
- Note that the names in the lists are just names, with no path components.
- To get a full path (which begins with top) to a file or directory in
- dirpath, do os.path.join(dirpath, name).
-
-
-
- os.walk的函数声明为:
- walk(top, topdown=True, onerror=None, followlinks=False)
- 参数:
- top 是你所要便利的目录的地址
- topdown 为真,则优先遍历top目录,否则优先遍历top的子目录(默认为开启)
- onerror 需要一个 callable 对象,当walk需要异常时,会调用
- followlinks 如果为真,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录(默认 关闭)
- os.walk 的返回值是一个生成器(generator),也就是说我们需要不断的遍历它,来获得所有的内容。
- 每次遍历的对象都是返回的是一个三元组(root,dirs,files)
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
- files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
- >>> import os
- >>> for parent, dirnames, filenames in os.walk('./cpp'):
- ... for dirname in dirnames:
- ... print('[DIR]', dirname)
- ... for filename in filenames:
- ... print('[FILE]', filename)
- ... break
- ...
- [DIR] string
- [DIR] lists
- [DIR] bitree
- [DIR] reference
- [DIR] threads
- [FILE] test.cc
- [FILE] binary_tree.c
- [FILE] shared_ptr.cc
- [FILE] get_arraysize.cc
- [FILE] subset_all.cc
- [FILE] bind_demo.cc
- [FILE] a.out
- [FILE] binary_tree.cpp
上述代码即遍历当前目录的所有文件并打印文件名,若去掉break则可以深层次遍历所有子目录。
至于后续操作则借用下列方法即可
最近刚接触了下python对函数式编程的支持,代码确实优雅不少,对性能没有严格要求的情景下这种风格的代码看起来非常舒服。
- def subdir_list(dirname):
- """获取目录下所有子目录名
- @param dirname: str 目录的完整路径
- @return: list(str) 所有子目录完整路径组成的列表
- """
- return list(filter(os.path.isdir,
- map(lambda filename: os.path.join(dirname, filename),
- os.listdir(dirname) )
- ))
-
- def file_list(dirname, ext='.csv'):
- """获取目录下所有特定后缀的文件
- @param dirname: str 目录的完整路径
- @param ext: str 后缀名, 以点号开头
- @return: list(str) 所有子文件名(不包含路径)组成的列表
- """
- return list(filter( lambda filename: os.path.splitext(filename)[1] == ext,
- os.listdir(dirname) ))
'运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。