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


当前回答

你可以简单地使用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。

其他回答

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

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')]
import os

path = 'mypath/path' 
files = os.listdir(path)

files_txt = [i for i in files if i.endswith('.txt')]

要从同一个目录中名为“data”的文件夹中获取一个“。txt”文件名的数组,我通常使用以下简单的代码行:

import os
fileNames = [fileName for fileName in os.listdir("data") if fileName.endswith(".txt")]

使用 fnmatch: https://docs.python.org/2/library/fnmatch.html

import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print file

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

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"))))