如何在python中找到扩展名为.txt的目录中的所有文件?


当前回答

如果文件夹包含大量文件或内存受限,可以考虑使用生成器:

def yield_files_with_extensions(folder_path, file_extension):
   for _, _, files in os.walk(folder_path):
       for file in files:
           if file.endswith(file_extension):
               yield file

选项A:迭代

for f in yield_files_with_extensions('.', '.txt'): 
    print(f)

选项B:全部获取

files = [f for f in yield_files_with_extensions('.', '.txt')]

其他回答

你可以使用glob:

import glob, os
os.chdir("/mydir")
for file in glob.glob("*.txt"):
    print(file)

或者简单的os.listdir:

import os
for file in os.listdir("/mydir"):
    if file.endswith(".txt"):
        print(os.path.join("/mydir", file))

或者如果你想遍历目录,使用os.walk:

import os
for root, dirs, files in os.walk("/mydir"):
    for file in files:
        if file.endswith(".txt"):
             print(os.path.join(root, file))

试试这个,这将递归地找到你所有的文件:

import glob, os
os.chdir("H:\\wallpaper")# use whatever directory you want

#double\\ no single \

for file in glob.glob("**/*.txt", recursive = True):
    print(file)
import os
import sys 

if len(sys.argv)==2:
    print('no params')
    sys.exit(1)

dir = sys.argv[1]
mask= sys.argv[2]

files = os.listdir(dir); 

res = filter(lambda x: x.endswith(mask), files); 

print res

子目录的功能性解决方案:

from fnmatch import filter
from functools import partial
from itertools import chain
from os import path, walk

print(*chain(*(map(partial(path.join, root), filter(filenames, "*.txt")) for root, _, filenames in walk("mydir"))))

你可以简单地使用pathlibs glob 1:

import pathlib

list(pathlib.Path('your_directory').glob('*.txt'))

或在循环中:

for txt_file in pathlib.Path('your_directory').glob('*.txt'):
    # do something with "txt_file"

如果你想递归你可以使用。glob('**/*.txt')


1 pathlib模块被包含在python 3.4的标准库中。但是你甚至可以在旧的Python版本(即使用conda或pip)上安装该模块的反向端口:pathlib和pathlib2。