使用:
def simpleFunc(dirName):
import os
fileList=[]
for dir, dirs, filenames in os.walk(dirName):
for filename in filenames:
filepath=dir+'/'+filename
fileList.append(filepath)
print fileList
simpleFunc(os.path.dirname('/entire/path/to/file.ext'))
问题是os.walk
并没有停止在/entire/path/to/
目录级别,而是一直到它能找到的最低层的子目录。因此,如果有/entire/path/to/subdir1/subdir2/subdir3
,那么除了/entire/path/to/
之外,还将搜索所有三个子目录:./subdir1/
、././subdir2/
、./././subdir3/
。问:如何确保函数停止在指定的目录级别:/entire/path/to/
,并且不会一直向下?
发布于 2014-06-04 12:27:00
根据您编写的内容,如果您只想搜索指定的目录。最好使用os.listdir
,然后只过滤os.path.isfile
,例如,如下所示:
def simple_func(dirpath):
paths = os.listdir(dirpath)
# create absolute paths
abs_paths = [os.path.join(dirpath, p) for p in paths]
# filter for paths that are files
file_list = [p for p in paths if os.path.isfile(p)]
return file_list
这样你就不必停止递归了,而且你想要哪个文件就很清楚了。您可能想要分析一下多个isfile
调用是否会造成任何伤害。
发布于 2014-06-04 12:25:50
from os import listdir
from os.path import isfile, join
path='/entire/path/to/'
files = [ join(path,f) for f in listdir(path) if isfile(join(path,f)) ]
files返回您的文件。不需要声明新的文件列表
发布于 2014-06-04 12:33:39
听起来你应该改用os.listdir
。
import os
my_path = '/entire/path/to/files/'
file_list = []
for filename in os.listdir(my_path):
filepath = os.path.join(my_path, filename)
if os.path.isfile(filepath):
fileList.append(filepath)
https://stackoverflow.com/questions/24028925
复制相似问题