如何在Python中仅列出目录下的常规文件(不包括目录)
可以使用如何在Python中仅列出目录下的常规文件(不包括目录),python,filesystems,Python,Filesystems,可以使用os.listdir('somedir')获取somedir下的所有文件。但是,如果我想要的只是常规文件(不包括目录),比如find的结果-在外壳下键入f 我知道,如果不是os.path.isdir('somedir/'+path'),可以使用[path for path in os.listdir('somedir')来获得与此相关问题类似的结果:。只是想知道是否有更简洁的方法可以做到这一点。您可以使用,它返回路径、文件夹和文件的元组: files = next(os.walk('so
os.listdir('somedir')
获取somedir
下的所有文件。但是,如果我想要的只是常规文件(不包括目录),比如find的结果-在外壳下键入f
我知道,如果不是os.path.isdir('somedir/'+path'),可以使用[path for path in os.listdir('somedir')来获得与此相关问题类似的结果:。只是想知道是否有更简洁的方法可以做到这一点。您可以使用,它返回路径、文件夹和文件的元组:
files = next(os.walk('somedir'))[2]
如果您只想要顶级目录中的文件,那么前面的os.walk
答案是完美的。但是,如果您也需要子目录的文件(lafind
),则需要处理每个目录,例如:
def find_files(path):
for prefix, _, files in os.walk(path):
for name in files:
yield os.path.join(prefix, name)
现在,list(find_files('.'))
是一个相同内容的列表find-键入f-print
将为您提供(列表是因为find_文件是一个生成器,如果不明显的话)。我有几种方法来完成这些任务。我无法评论解决方案的简洁性。FWIW这里是:
1.下面的代码将获取以.txt结尾的所有文件。您可能需要删除“.endswith”部分
2.这里的代码假设为函数提供了路径,并将所有.txt文件附加到列表中,如果路径中有子目录,则将这些子目录中的文件附加到子文件中
def readFilesNameList(self, path):
basePath = path
allfiles = []
subfiles = []
for root, dirs, files in os.walk(basePath):
for f in files:
if f.endswith('.txt'):
allfiles.append(os.path.join(root,f))
if root!=basePath:
subfiles.append(os.path.join(root, f))
我知道代码只是一个骨架,但我认为您可以了解总体情况。
如果你找到简洁的方法,就发帖子吧!:)
def readFilesNameList(self, path):
basePath = path
allfiles = []
subfiles = []
for root, dirs, files in os.walk(basePath):
for f in files:
if f.endswith('.txt'):
allfiles.append(os.path.join(root,f))
if root!=basePath:
subfiles.append(os.path.join(root, f))